XmlAnyElementAttribute 클래스
멤버(XmlElement 또는 XmlNode 개체의 배열을 반환하는 필드)가 serialize 또는 deserialize되고 있는 개체에 해당 멤버가 없는 XML 요소를 나타내는 개체를 포함하도록 지정합니다.
네임스페이스: System.Xml.Serialization
어셈블리: System.Xml(system.xml.dll)
구문
‘선언
<AttributeUsageAttribute(AttributeTargets.Property Or AttributeTargets.Field Or AttributeTargets.Parameter Or AttributeTargets.ReturnValue, AllowMultiple:=True)> _
Public Class XmlAnyElementAttribute
Inherits Attribute
‘사용 방법
Dim instance As XmlAnyElementAttribute
[AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, AllowMultiple=true)]
public class XmlAnyElementAttribute : Attribute
[AttributeUsageAttribute(AttributeTargets::Property|AttributeTargets::Field|AttributeTargets::Parameter|AttributeTargets::ReturnValue, AllowMultiple=true)]
public ref class XmlAnyElementAttribute : public Attribute
/** @attribute AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, AllowMultiple=true) */
public class XmlAnyElementAttribute extends Attribute
AttributeUsageAttribute(AttributeTargets.Property|AttributeTargets.Field|AttributeTargets.Parameter|AttributeTargets.ReturnValue, AllowMultiple=true)
public class XmlAnyElementAttribute extends Attribute
설명
XmlAnyElementAttribute를 사용하여, 문서의 일부로 보낸 메타데이터와 같이 XML의 일부로 보낼 수 있는 임의의 데이터(XML 특성)를 포함합니다.
XmlAnyElementAttribute를 XmlElement 또는 XmlNode 개체의 배열을 반환하는 필드에 적용합니다. 이러한 필드는 개체가 serialize되거나 deserialize되고 있는지 여부에 따라 두 가지 방법으로 사용할 수 있습니다. serialize되고 있는 경우, serialize되는 개체에 해당 멤버가 없어도 개체는 XML 요소나 노드로 생성됩니다. 특성을 적용하는 동안 Name 속성 값을 지정하면 배열에 삽입된 모든 XmlElement 또는 XmlNode 개체에는 동일한 요소 이름과 기본 네임스페이스가 있어야 합니다. 그렇지 않으면 예외가 throw됩니다. Namespace 속성 값을 설정하는 경우 Name 속성도 설정해야 하며 XmlElement 또는 XmlNode 개체에도 동일한 이름과 네임스페이스 값이 있어야 합니다. Name 값을 지정하지 않으면 XmlElement 또는 XmlNode 개체는 아무 요소 이름을 가질 수 있습니다.
XmlSerializer 클래스의 Deserialize 메서드를 호출하면, deserialize되고 있는 개체에 해당 멤버가 없는 모든 요소가 배열에 수집됩니다. deserialization이 끝나면 XmlElement 항목의 컬렉션 전체를 반복하여 데이터를 처리할 수 있습니다. Name 값을 지정하면 이 배열에는 해당 이름의 XML 요소만이 포함됩니다. Name 값을 지정하지 않으면 이 배열에는 클래스에 해당 멤버가 없는 모든 요소가 포함됩니다. 특성이 적용될 필드가 두 개 이상 클래스에 있으면 Name 또는 Name 및 Namespace 속성을 사용하여 배열의 내용을 구분합니다. 여러 개의 필드가 있는 이러한 클래스에 구분 속성 값 집합(Name과 Namespace)이 없는 필드도 한 개 들어 있는 경우, deserialization을 수행하는 동안 이 배열에는 다른 배열에 아직 포함되지 않은 알 수 없는 XML 요소가 포함됩니다. 구분 Name 또는 Name 및 Namespace 값 집합이 없는 필드가 두 개 이상 클래스에 있으면 deserialization을 수행하는 동안 동작이 지정되지 않습니다.
XmlAnyElementAttribute를 단일 XmlElement 개체를 반환하는 필드에 적용할 수도 있습니다. 적용을 하려면 XmlElement 클래스의 속성과 메서드를 사용하여 알 수 없는 요소 전체를 재귀적으로 반복해야 합니다.
XmlAnyElementAttribute의 여러 인스턴스를 클래스 멤버에 적용할 수 있지만 각 인스턴스에는 고유한 Name 속성 값이 있어야 합니다. 즉, 동일한 Name 속성이 각 인스턴스에 설정되어 있는 경우 고유한 Namespace 속성 값을 각 인스턴스에 설정해야 합니다.
XmlSerializer의 UnknownNode와 UnknownAttribute 이벤트는 XmlAnyElementAttribute를 클래스의 멤버에 적용한 경우 발생하지 않습니다.
참고
긴 XmlAnyElementAttribute 대신 XmlAnyElement라는 단어를 코드에서 사용할 수 있습니다.
특성 사용에 대한 자세한 내용은 특성을 사용하여 메타데이터 확장을 참조하십시오.
예제
다음 예제에서는 XmlElement 개체의 배열을 반환하는 AllElements라는 필드에 XmlAnyElementAttribute를 적용합니다.
Public Class XClass
' Apply the XmlAnyElementAttribute to a field returning an array
' of XmlElement objects.
<XmlAnyElement()> Public AllElements() As XmlElement
End Class 'XClass
Public Class Test
Public Shared Sub Main()
Dim t As New Test()
t.DeserializeObject("XFile.xml")
End Sub 'Main
Private Sub DeserializeObject(filename As String)
' Create an XmlSerializer.
Dim mySerializer As New XmlSerializer(GetType(XClass))
' To read a file, a FileStream is needed.
Dim fs As New FileStream(filename, FileMode.Open)
' Deserialize the class.
Dim x As XClass = CType(mySerializer.Deserialize(fs), XClass)
' Read the element names and values.
Dim xel As XmlElement
For Each xel In x.AllElements
Console.WriteLine((xel.LocalName & ": " & xel.Value))
Next xel
End Sub 'DeserializeObject
End Class 'Test
public class XClass
{
/* Apply the XmlAnyElementAttribute to a field returning an array
of XmlElement objects. */
[XmlAnyElement]
public XmlElement[] AllElements;
}
public class Test
{
public static void Main()
{
Test t = new Test();
t.DeserializeObject("XFile.xml");
}
private void DeserializeObject(string filename)
{
// Create an XmlSerializer.
XmlSerializer mySerializer = new XmlSerializer(typeof(XClass));
// To read a file, a FileStream is needed.
FileStream fs = new FileStream(filename, FileMode.Open);
// Deserialize the class.
XClass x = (XClass) mySerializer.Deserialize(fs);
// Read the element names and values.
foreach(XmlElement xel in x.AllElements)
Console.WriteLine(xel.LocalName + ": " + xel.Value);
}
}
public ref class XClass
{
public:
/* Apply the XmlAnyElementAttribute to a field returning an array
of XmlElement objects. */
[XmlAnyElement]
array<XmlElement^>^AllElements;
};
public ref class Test
{
public:
void DeserializeObject( String^ filename )
{
// Create an XmlSerializer.
XmlSerializer^ mySerializer = gcnew XmlSerializer( XClass::typeid );
// To read a file, a FileStream is needed.
FileStream^ fs = gcnew FileStream( filename,FileMode::Open );
// Deserialize the class.
XClass^ x = dynamic_cast<XClass^>(mySerializer->Deserialize( fs ));
// Read the element names and values.
System::Collections::IEnumerator^ myEnum = x->AllElements->GetEnumerator();
while ( myEnum->MoveNext() )
{
XmlElement^ xel = safe_cast<XmlElement^>(myEnum->Current);
Console::WriteLine( "{0}: {1}", xel->LocalName, xel->Value );
}
}
};
int main()
{
Test^ t = gcnew Test;
t->DeserializeObject( "XFile.xml" );
}
public class XClass
{
/* Apply the XmlAnyElementAttribute to a field returning an array
of XmlElement objects.
*/
/** @attribute XmlAnyElement()
*/
public XmlElement allElements[];
} //XClass
public class Test
{
public static void main(String[] args)
{
Test t = new Test();
t.DeserializeObject("XFile.xml");
} //main
private void DeserializeObject(String fileName)
{
// Create an XmlSerializer.
XmlSerializer mySerializer = new XmlSerializer(XClass.class.ToType());
// To read a file, a FileStream is needed.
FileStream fs = new FileStream(fileName, FileMode.Open);
// Deserialize the class.
XClass x = (XClass)mySerializer.Deserialize(fs);
// Read the element names and values.
for (int iCtr = 0; iCtr < x.allElements.length; iCtr++) {
XmlElement xel = (XmlElement)x.allElements.get_Item(iCtr);
Console.WriteLine(xel.get_LocalName() + ": " + xel.get_Value());
}
} //DeserializeObject
} //Test
상속 계층 구조
System.Object
System.Attribute
System.Xml.Serialization.XmlAnyElementAttribute
스레드로부터의 안전성
이 형식의 모든 public static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.
플랫폼
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework에서 모든 플래폼의 모든 버전을 지원하지는 않습니다. 지원되는 버전의 목록은 시스템 요구 사항을 참조하십시오.
버전 정보
.NET Framework
2.0, 1.1, 1.0에서 지원
.NET Compact Framework
2.0, 1.0에서 지원
참고 항목
참조
XmlAnyElementAttribute 멤버
System.Xml.Serialization 네임스페이스
XmlAnyAttributeAttribute 클래스