Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Als Instanz des XPath 2.0-Datenmodells kann die XPathNavigator Klasse stark typierte Daten enthalten, die common language runtime (CLR)-Typen zugeordnet sind. Gemäß dem XPath 2.0-Datenmodell können nur Elemente und Attribute stark typierte Daten enthalten. Die XPathNavigator Klasse bietet Mechanismen für den Zugriff auf Daten innerhalb eines XPathDocument oder XmlDocument Objekts als stark typisierte Daten sowie Mechanismen zur Konvertierung von einem Datentyp in einen anderen.
Von XPathNavigator verfügbar gemachte Typinformationen
XML 1.0-Daten sind technisch ohne Typ, es sei denn, sie werden mit einem DTD- oder XSD-Schema (XML-Schemadefinitionssprache) oder einem anderen Mechanismus verarbeitet. Es gibt eine Reihe von Kategorien von Typinformationen, die einem XML-Element oder Attribut zugeordnet werden können.
Einfache CLR-Typen: Keine der XML-Schemasprachen unterstützt common Language Runtime (CLR)-Typen direkt. Da es nützlich ist, einfache Element- und Attributinhalte als den am besten geeigneten CLR-Typ ansehen zu können, können alle einfachen Inhalte in Abwesenheit von Schemainformationen als `String` typisiert werden, wobei zusätzliche Schemainformationen diesen Inhalt möglicherweise zu einem passenderen Typ verfeinern. Sie finden den besten übereinstimmenden CLR-Typ von einfachen Elementen und Attributinhalten mithilfe der ValueType Eigenschaft. Weitere Informationen zur Zuordnung von schema integrierten Typen zu CLR-Typen finden Sie unter "Typunterstützung" in den System.Xml-Klassen.
Listen einfacher Typen (CLR): Ein Element oder Attribut mit einfachem Inhalt kann eine Liste von Werten enthalten, die durch Leerzeichen getrennt sind. Die Werte werden durch ein XML-Schema als "Listentyp" angegeben. Wenn kein XML-Schema vorhanden ist, werden solche einfachen Inhalte als einzelner Textknoten behandelt. Wenn ein XML-Schema verfügbar ist, kann dieser einfache Inhalt als eine Reihe von Atomwerten verfügbar gemacht werden, die jeweils einen einfachen Typ aufweisen, der einer Auflistung von CLR-Objekten zugeordnet ist. Weitere Informationen zur Zuordnung von schema integrierten Typen zu CLR-Typen finden Sie unter "Typunterstützung" in den System.Xml-Klassen.
Typwert: Ein schemaüberprüfungsfähiges Attribut oder Element mit einem einfachen Typ weist einen typierten Wert auf. Dieser Wert ist ein Grundtyp, z. B. ein numerischer Typ, eine Zeichenfolge oder ein Datumstyp. Alle integrierten einfachen Typen in XSD können CLR-Typen zugeordnet werden, die Zugriff auf den Wert eines Knotens als einen besser geeigneten Typ anstatt nur als einen String bereitstellen. Ein Element mit Attributen oder untergeordneten Elementen wird als komplexer Typ betrachtet. Der typisierte Wert eines komplexen Typs mit einfachem Inhalt (nur Textknoten als untergeordnete Elemente) ist der gleiche wie der Wert des einfachen Typs dieses Inhalts. Der typisierte Wert eines komplexen Typs mit komplexem Inhalt (ein oder mehrere untergeordnete Elemente) ist der Zeichenfolgenwert, der aus der Verkettung aller untergeordneten Textknoten entsteht und als String zurückgegeben wird. Weitere Informationen zur Zuordnung von schema integrierten Typen zu CLR-Typen finden Sie unter "Typunterstützung" in den System.Xml-Klassen.
Schema-Language Spezifischer Typname: In den meisten Fällen werden die CLR-Typen, die als Nebeneffekt der Anwendung eines externen Schemas festgelegt sind, verwendet, um zugriff auf den Wert eines Knotens bereitzustellen. Es kann jedoch Situationen geben, in denen Sie den Typ untersuchen möchten, der einem bestimmten Schema zugeordnet ist, das auf ein XML-Dokument angewendet wird. Sie können beispielsweise ein XML-Dokument durchsuchen und alle Elemente extrahieren, deren Inhalt gemäß einem angefügten Schema als vom Typ "PurchaseOrder" bestimmt wird. Solche Typinformationen können nur als Ergebnis der Schemaüberprüfung festgelegt werden, und auf diese Informationen wird über die Eigenschaften XmlType und SchemaInfo der Klasse XPathNavigator zugegriffen. Weitere Informationen finden Sie unten im Abschnitt "Post Schema Validation Infoset (PSVI)".
Schema-Language Spezifische Typspiegelung: In anderen Fällen möchten Sie möglicherweise weitere Details des schemaspezifischen Typs abrufen, der auf ein XML-Dokument angewendet wird. Wenn Sie beispielsweise eine XML-Datei lesen, können Sie das
maxOccursAttribut für jeden gültigen Knoten im XML-Dokument extrahieren, um eine benutzerdefinierte Berechnung durchzuführen. Da diese Informationen nur über die Schemaüberprüfung festgelegt werden, wird über die SchemaInfo Eigenschaft der XPathNavigator Klasse zugegriffen. Weitere Informationen finden Sie unten im Abschnitt "Post Schema Validation Infoset (PSVI)".
Mit "XPathNavigator" typisierte Accessoren
In der folgenden Tabelle sind die verschiedenen Eigenschaften und Methoden der XPathNavigator Klasse aufgeführt, die für den Zugriff auf die Typinformationen zu einem Knoten verwendet werden können.
| Eigentum | BESCHREIBUNG |
|---|---|
| XmlType | Dies enthält die XML-Schematypinformationen für den Knoten, falls er gültig ist. |
| SchemaInfo | Dieses Objekt enthält das Post-Schema-Validation-Infoset des Knotens, der nach der Validierung hinzugefügt wird. Dazu gehören die XML-Schematypinformationen sowie Gültigkeitsinformationen. |
| ValueType | Der CLR-Typ des typisierten Werts des Knotens. |
| TypedValue | Der Inhalt des Knotens als einen oder mehrere CLR-Werte, deren Typ dem XML-Schematyp des Knotens am nächsten kommt. |
| ValueAsBoolean | Der String-Wert des aktuellen Knotens, gemäß der Umwandlungsregeln für XPath 2.0 für Boolean in einen xs:boolean-Wert umgewandelt. |
| ValueAsDateTime | Der String-Wert des aktuellen Knotens, gemäß der Umwandlungsregeln für XPath 2.0 für DateTime in einen xs:datetime-Wert umgewandelt. |
| ValueAsDouble | Der String-Wert des aktuellen Knotens, gemäß der Umwandlungsregeln für XPath 2.0 für Double in einen xsd:double-Wert umgewandelt. |
| ValueAsInt | Der String-Wert des aktuellen Knotens, gemäß der Umwandlungsregeln für XPath 2.0 für Int32 in einen xs:integer-Wert umgewandelt. |
| ValueAsLong | Der String-Wert des aktuellen Knotens, gemäß der Umwandlungsregeln für XPath 2.0 für Int64 in einen xs:integer-Wert umgewandelt. |
| ValueAs | Der Inhalt des Knotens, gemäß der Umwandlungsregeln für XPath 2.0 in den Zieltyp umgewandelt. |
Weitere Informationen zur Zuordnung von schema integrierten Typen zu CLR-Typen finden Sie unter "Typunterstützung" in den System.Xml-Klassen.
Das Post-Schema-Validation-Infoset (PSVI)
Ein XML-Schemaprozessor akzeptiert ein XML-Infoset als Eingabe und konvertiert es in ein Post Schema Validation Infoset (PSVI). Ein PSVI ist das ursprüngliche XML-Infoset, dem neue Informationselemente und neue Eigenschaften zu vorhandenen Informationselementen hinzugefügt wurden. Es gibt drei allgemeine Informationsklassen, die dem XML-Infoset in der PSVI hinzugefügt werden und die vom XPathNavigator offengelegt werden.
Validierungsergebnisse: Informationen dazu, ob ein Element oder Attribut erfolgreich überprüft wurde oder nicht. Diese werden von der Validity-Eigenschaft der SchemaInfo-Eigenschaft der XPathNavigator-Klasse verfügbar gemacht.
Standardinformationen: Gibt an, ob der Wert des Elements oder Attributs über im Schema angegebene Standardwerte abgerufen wurde oder nicht. Diese werden von der IsDefault-Eigenschaft der SchemaInfo-Eigenschaft der XPathNavigator-Klasse verfügbar gemacht.
Typanmerkungen: Verweise auf Schemakomponenten, die Typdefinitionen oder Element- und Attributdeklarationen sein können. Die XmlType Eigenschaft von XPathNavigator enthält die spezifischen Typinformationen des Knotens, wenn diese gültig sind. Falls die Gültigkeit eines Knotens unbekannt ist, wie im Fall einer vorherigen Validierung gefolgt von einer anschließenden Bearbeitung. Dann wird die XmlType Eigenschaft auf
nullfestgelegt, aber Typinformationen sind immer noch aus den verschiedenen Eigenschaften der SchemaInfo Eigenschaft der XPathNavigator Klasse verfügbar.
Im folgenden Beispiel wird das Verwenden der Informationen im Post-Schema-Validation-Infoset veranschaulicht, die von XPathNavigator verfügbar gemacht wurden.
Dim settings As XmlReaderSettings = New XmlReaderSettings()
settings.Schemas.Add("http://www.contoso.com/books", "books.xsd")
settings.ValidationType = ValidationType.Schema
Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
Dim document As XmlDocument = New XmlDocument()
document.Load(reader)
Dim navigator As XPathNavigator = document.CreateNavigator()
navigator.MoveToChild("books", "http://www.contoso.com/books")
navigator.MoveToChild("book", "http://www.contoso.com/books")
navigator.MoveToChild("published", "http://www.contoso.com/books")
Console.WriteLine(navigator.SchemaInfo.SchemaType.Name)
Console.WriteLine(navigator.SchemaInfo.Validity)
Console.WriteLine(navigator.SchemaInfo.SchemaElement.MinOccurs)
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("http://www.contoso.com/books", "books.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create("books.xml", settings);
XmlDocument document = new XmlDocument();
document.Load(reader);
XPathNavigator navigator = document.CreateNavigator();
navigator.MoveToChild("books", "http://www.contoso.com/books");
navigator.MoveToChild("book", "http://www.contoso.com/books");
navigator.MoveToChild("published", "http://www.contoso.com/books");
Console.WriteLine(navigator.SchemaInfo.SchemaType.Name);
Console.WriteLine(navigator.SchemaInfo.Validity);
Console.WriteLine(navigator.SchemaInfo.SchemaElement.MinOccurs);
Im Beispiel wird die books.xml Datei als Eingabe verwendet.
<books xmlns="http://www.contoso.com/books">
<book>
<title>Title</title>
<price>10.00</price>
<published>2003-12-31</published>
</book>
</books>
Im Beispiel wird das books.xsd Schema auch als Eingabe verwendet.
<xs:schema xmlns="http://www.contoso.com/books"
attributeFormDefault="unqualified" elementFormDefault="qualified"
targetNamespace="http://www.contoso.com/books"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="publishedType">
<xs:restriction base="xs:date">
<xs:minInclusive value="2003-01-01" />
<xs:maxInclusive value="2003-12-31" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="bookType">
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="price" type="xs:decimal"/>
<xs:element name="published" type="publishedType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="booksType">
<xs:sequence>
<xs:element name="book" type="bookType" />
</xs:sequence>
</xs:complexType>
<xs:element name="books" type="booksType" />
</xs:schema>
Abrufen von typierten Werten mithilfe von ValueAs-Eigenschaften
Der typisierte Wert eines Knotens kann abgerufen werden, indem man auf die Eigenschaft TypedValue des XPathNavigator zugreift. In bestimmten Fällen können Sie den typierten Wert eines Knotens in einen anderen Typ konvertieren. Ein gängiges Beispiel ist das Abrufen eines numerischen Werts aus einem XML-Knoten. Betrachten Sie beispielsweise das folgende nicht überprüfte und nicht typisierte XML-Dokument.
<books>
<book>
<title>Title</title>
<price>10.00</price>
<published>2003-12-31</published>
</book>
</books>
Wenn das XPathNavigator auf dem price Element positioniert ist, wäre die XmlType Eigenschaft null, die ValueType Eigenschaft wäre String, und die TypedValue Eigenschaft wäre die Zeichenfolge 10.00.
Es ist jedoch weiterhin möglich, den Wert als numerischer Wert mithilfe der ValueAs, ValueAsDouble, , ValueAsIntoder ValueAsLong Methoden und Eigenschaften zu extrahieren. Im folgenden Beispiel wird das Durchführen einer solchen Umwandlung mithilfe der ValueAs-Methode veranschaulicht.
Dim document As New XmlDocument()
document.Load("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
navigator.MoveToChild("books", "")
navigator.MoveToChild("book", "")
navigator.MoveToChild("price", "")
Dim price = navigator.ValueAs(GetType(Decimal))
Dim discount As Decimal = 0.2
Console.WriteLine("The price of the book has been dropped 20% from {0:C} to {1:C}", navigator.Value, (price - price * discount))
XmlDocument document = new XmlDocument();
document.Load("books.xml");
XPathNavigator navigator = document.CreateNavigator();
navigator.MoveToChild("books", "");
navigator.MoveToChild("book", "");
navigator.MoveToChild("price", "");
Decimal price = (decimal)navigator.ValueAs(typeof(decimal));
Console.WriteLine("The price of the book has been dropped 20% from {0:C} to {1:C}", navigator.Value, (price - price * (decimal)0.20));
Weitere Informationen zur Zuordnung von schema integrierten Typen zu CLR-Typen finden Sie unter "Typunterstützung" in den System.Xml-Klassen.
Siehe auch
- XmlDocument
- XPathDocument
- XPathNavigator
- Type Support in the System.Xml Classes (Typenunterstützung in den System.Xml-Klassen)
- Verarbeiten von XML-Daten mithilfe des XPath-Datenmodells
- Knotensatznavigation mit XPathNavigator
- Attribut- und Namespaceknotennavigation mit XPathNavigator
- Extrahieren von XML-Daten mit XPathNavigator