Freigeben über


Bindungsunterstützung für das any-Element

Dieses Thema bezieht sich auf eine veraltete Technologie. XML-Webdienste und XML-Webdienstclients sollten nun mithilfe der folgenden Technologie erstellt werden: Windows Communication Foundation.

.NET Framework bietet partielle Bindungsunterstützung für das <any>-Element.

Beim Generieren von Quellcode aus einem XML-Schemadokument wandelt Xsd.exe das <any>-Element in ein Feld des Typs XmlElement mit einem XmlAnyElementAttribute-Attribut um.

Erklärung

Der <any>-Platzhalter ermöglicht, dass an der angegebenen Stelle in einem XML-Instanzendokument ein beliebiges Element (ein Element mit beliebigem Namen oder Typ) mit ein paar Einschränkungen auftreten kann.

Beim Generieren von Quellcode aus einem XML-Schemadokument wandelt Xsd.exe das <any>-Element in ein Feld des Typs XmlElement mit einem XmlAnyElementAttribute-Attribut um. Dieses Attribut ermöglicht einer Klasse, beliebige XML-Elemente darzustellen, ohne diese an Nicht-XML-Typen zu binden, die in anderen möglichen Feldern oder Eigenschaften der Klasse angegeben sind.

Wenn das <any>-Element mit einem maxOccurs-Attribut auftritt, das einen Wert größer als 1 oder unbounded aufweist, erzeugt Xsd.exe ein XmlElement-Array mit einem XmlAnyElement-Attribut. Ein einziges XmlElement wird erzeugt, wenn der Wert des maxOccurs-Attributs 1 (Standard) oder 0 ist. Eine Erläuterung dieses Verhaltens finden Sie unter den Ausführungen zum maxOccurs-Attribut.

Beim Generieren eines XML-Schemadokuments aus einer Reihe von Klassen in einer Assembly führt Xsd.exe die umgekehrte Übersetzung durch: Felder oder Eigenschaften des Typs System.Xml.XmlElement mit dem XmlAnyElementAttribute-Attribut werden in <any>-Elemente übersetzt.

namespace-Attribut und processContents-Attribut

Beim Generieren von XML-Schemadefinitionen oder Klassen werden das namespace-Attribut und das processContents-Attribut ignoriert. Dies bedeutet, dass unabhängig von den Attributwerten in einer ursprünglichen XML-Schemadefinition beim Generieren von Klassen aus dieser Definition und dem anschließenden Generieren eines XML-Schemas aus diesen Klassen durch Xsd.exe das <any>-Element des generierten XML-Schemas diese Attribute nicht mehr aufweist. Daher werden im letzteren Schema die folgenden Standardwerte übernommen:

  • namespace="##any": Das namespace-Attribut gibt die Namespaces an, in denen das Element definiert werden muss. Ein Wert von ##any lässt jeden Namespace zu.

  • processContents="strict": Stellt beim Überprüfen eines XML-Instanzendokuments auf Übereinstimmung mit dem angegebenen XML-Schema sicher, dass alle Elementtypen entsprechend den angegebenen Namespaces überprüft werden. Wenn ein Elementtyp nicht erkannt wird, schlägt die Validierung fehl.

Ebenso werden das namespace-Attribut und das processContents-Attribut bei der Deserialisierung von XML-Dokumenten in Objekte ignoriert. Stattdessen verhält sich die XmlSerializer-Klasse so, als ob die beiden Attribute auf die folgenden Werte festgelegt wurden:

  • namespace="##any": Dies ist der Standardwert.

  • processContents="lax": Überprüft beim Überprüfen eines XML-Instanzendokuments auf Übereinstimmung mit dem angegebenen XML-Schema das Element nur, wenn sein Namespace abgerufen werden kann. Andernfalls wird sichergestellt, dass nicht erkannte Elemente aus wohlgeformtem XML-Code bestehen.

2w8zbwa2.note(de-de,VS.100).gifHinweis:
Obwohl .NET Framework zur Laufzeit von processContents="lax" ausgeht, generiert .NET Framework zur Bereitstellungszeit XML-Schemadefinitionen, wenn der Standardwert processContents="strict" implizit angegeben ist.

Xsd.exe und die XmlSerializer-Klasse stellen die gleichen Bindungen für das namespace-Attribut und das processContents-Attribut bereit, wenn sie im <anyAttribute>-Element dargestellt werden.

Beispiel

XML-Schema-Eingabedokument:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            targetNamespace="http://example.org/" xmlns="http://example.org/" elementFormDefault="qualified">
    <xsd:element name="complexInstance" type="MyComplexType"/>

    <xsd:complexType name="MyComplexType">
        <xsd:sequence>
            <xsd:element name="field1" type="xsd:string"/>
            <xsd:any namespace="##local" processContents="strict"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:schema>

Aus dem vorherigen XML-Schemadokument generierte C#-Klasse:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("complexInstance", Namespace="http://example.org/", IsNullable=false)]
public class MyComplexType {
        
    public string field1;
        
    [System.Xml.Serialization.XmlAnyElementAttribute()]
    public System.Xml.XmlElement Any;
}

Aus einer Assembly, die aus der vorherigen C#-Quelle kompiliert wurde, generierter komplexer XML-Schematyp:

<xs:schema xmlns:tns="http://example.org/" elementFormDefault="qualified" targetNamespace="http://example.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="complexInstance" type="tns:MyComplexType" />
  <xs:complexType name="MyComplexType">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="field1" type="xs:string" />
      <xs:any minOccurs="0" maxOccurs="1" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>

Mögliche Attribute Bindungsunterstützung

id

Das Hilfsprogramm Xsd.exe ignoriert das id-Attribut, mit dem ein eindeutiger Bezeichner bereitgestellt werden soll.

maxOccurs

Siehe den Abschnitt Erklärung in diesem Thema. Siehe auch die Ausführungen zum Bindungsunterstützung für das maxOccurs-Attribut-Attribut.

minOccurs

Beim Generieren von Quellcode aus einem XML-Schemadokument ignoriert das Tool Xsd.exe das minOccurs-Attribut, wenn dieses auf das <any>-Element angewendet wird.

Beim Generieren eines XSD-Dokuments aus Klassen erzeugt das Tool Xsd.exe für das minOccurs-Attribut im <any>-Element den Wert 0.

Weitere Informationen finden Sie in den Ausführungen zum Bindungsunterstützung für das minOccurs-Attribut-Attribut.

namespace

Siehe den Abschnitt über das namespace-Attribut und das processContents-Attribut in diesem Thema.

processContents

Siehe den Abschnitt über das namespace-Attribut und das processContents-Attribut in diesem Thema.

Mögliche übergeordnete Elemente: <choice>, <sequence>

Mögliche untergeordnete Elemente: <annotation>

Siehe auch

Verweis

XmlSchemaAny