Share via


XmlAnyElementAttribute-Klasse

Gibt an, dass der Member (ein Feld, das ein Array von XmlElement-Objekten oder XmlNode-Objekten zurückgibt) Objekte enthält, die XML-Elemente darstellen, die keine entsprechenden Member in dem zu serialisierenden oder zu deserialisierenden Objekt aufweisen.

Namespace: System.Xml.Serialization
Assembly: System.Xml (in system.xml.dll)

Syntax

'Declaration
<AttributeUsageAttribute(AttributeTargets.Property Or AttributeTargets.Field Or AttributeTargets.Parameter Or AttributeTargets.ReturnValue, AllowMultiple:=True)> _
Public Class XmlAnyElementAttribute
    Inherits Attribute
'Usage
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

Hinweise

Das XmlAnyElementAttribute kann beliebige Daten (als XML-Elemente) enthalten, die als Teil eines XML-Dokuments gesendet werden können, z. B. Metadaten.

Wenden Sie XmlAnyElementAttribute auf ein Feld an, das ein Array von XmlElement-Objekten oder XmlNode-Objekten zurückgibt. Ein solches Feld kann auf zwei Arten verwendet werden, je nachdem, ob ein Objekt serialisiert oder deserialisiert wird. Bei der Serialisierung werden die Objekte als XML-Elemente oder -Knoten generiert, auch wenn diese über keinen bzw. keine entsprechenden Member im zu serialisierenden Objekt verfügen. Wenn Sie beim Anwenden des Attributs einen Name-Eigenschaftenwert angeben, müssen alle in das Array eingefügten XmlElement-Objekte oder XmlNode-Objekte über denselben Elementnamen und Standardnamespace verfügen, oder es wird eine Ausnahme ausgelöst. Wenn Sie den Namespace-Eigenschaftenwert festlegen, müssen Sie auch die Name-Eigenschaft festlegen, und die XmlElement-Objekte oder XmlNode-Objekte müssen denselben Namen und dieselben Namespacewerte aufweisen. Wenn kein Name-Wert angegeben wird, kann das XmlElement-Objekt oder das XmlNode-Objekt jeden Elementnamen annehmen.

Wenn Sie die Deserialize-Methode der XmlSerializer-Klasse aufrufen, werden alle Elemente in dem Array zusammengestellt, die über keinen entsprechenden Member in dem zu deserialisierenden Objekt verfügen. Nach dem Deserialisieren können Sie die Auflistung der XmlElement-Elemente zum Verarbeiten der Daten durchlaufen. Wenn Sie einen Name-Wert angeben, enthält das Array nur die XML-Elemente mit diesem Namen. Wenn Sie keinen Name-Wert angeben, enthält das Array alle Elemente, die über keinen entsprechenden Member in der Klasse verfügen. Wenn eine Klasse mehrere Felder enthält, auf die das Attribut angewendet wird, verwenden Sie die Name-Eigenschaft oder die Name-Eigenschaft und die Namespace-Eigenschaft zum Unterscheiden zwischen den Inhalten der Arrays. Wenn eine solche Klasse (mit mehreren Feldern) außerdem ein Feld ohne festgelegte unterscheidende Eigenschaftenwerte enthält (also Name und Namespace), enthält dieses Array bei der Deserialisierung alle unbekannten XML-Elemente, die nicht bereits in den anderen Arrays vorhanden sind. Wenn eine Klasse mehrere Felder ohne festgelegten unterscheidenden Name-Wert oder Name-Wert und Namespace-Wert enthält, ist das Verhalten während der Deserialisierung nicht definiert.

Sie können das XmlAnyElementAttribute auch auf ein Feld anwenden, das ein einzelnes XmlElement-Objekt zurückgibt. In diesem Fall müssen Sie die Eigenschaften und Methoden der XmlElement-Klasse verwenden, um die unbekannten Elemente rekursiv zu durchlaufen.

Sie können mehrere Instanzen von XmlAnyElementAttribute auf einen Klassenmember anwenden, jedoch muss jede Instanz über einen unterschiedlichen Name-Eigenschaftenwert verfügen. Wenn dieselbe Name-Eigenschaft für alle Instanzen festgelegt wurde, muss für jede Instanz ein unterschiedlicher Namespace-Eigenschaftenwert festgelegt werden.

Das UnknownNode-Ereignis und das UnknownAttribute-Ereignis von XmlSerializer treten nicht ein, wenn Sie XmlAnyElementAttribute auf den Member einer Klasse anwenden.

Hinweis

Sie können das Wort XmlAnyElement anstelle des längeren XmlAnyElementAttribute im Code verwenden.

Weitere Informationen über das Verwenden von Attributen finden Sie unter Erweitern von Metadaten mithilfe von Attributen.

Beispiel

Im folgenden Beispiel wird XmlAnyElementAttribute auf das Feld AllElements angewendet, das ein Array von XmlElement-Objekten zurückgibt.

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

Vererbungshierarchie

System.Object
   System.Attribute
    System.Xml.Serialization.XmlAnyElementAttribute

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

XmlAnyElementAttribute-Member
System.Xml.Serialization-Namespace
XmlAnyAttributeAttribute-Klasse

Weitere Ressourcen

Einführung in die XML-Serialisierung