Kompilierte XPath-Ausdrücke
Ein XPathExpression-Objekt stellt eine kompilierte XPath-Abfrage dar, die entweder von der statischen Compile-Methode der XPathExpression-Klasse oder der Compile-Methode der XPathNavigator-Klasse zurückgegeben wurde.
Die XPathExpression-Klasse
Eine durch ein XPathExpression-Objekt dargestellte kompilierte XPath-Abfrage ist nützlich, wenn dieselbe XPath-Abfrage mehrmals verwendet wird.
Wenn z. B. die Select-Methode mehrmals ausgerufen wird, verwenden Sie die Compile-Methode der XPathExpression-Klasse oder die Compile-Methode der XPathNavigator-Klasse, um die XPath-Abfrage zu kompilieren und in einem XPathExpression-Objekt zur Wiederverwendung und Leistungssteigerung zwischenzuspeichern, anstatt jedes Mal eine Zeichenfolge zu verwenden, die die XPath-Abfrage darstellt.
Nach der Kompilierung kann das XPathExpression-Objekt je nach dem Typ, der von der XPath-Abfrage zurückgegeben wird, als Eingabe für die folgenden Methoden der XPathNavigator-Klasse verwendet werden:
In der folgenden Tabelle werden alle XPath-Rückgabetypen des W3C sowie ihre Entsprechungen in Microsoft .NET Framework beschrieben. Außerdem wird erläutert, welche Methoden das XPathExpression-Objekt auf der Basis des Rückgabetyps verwenden.
XPath-Rückgabetyp des W3C | Entsprechender .NET Framework-Typ | Beschreibung | Methoden |
---|---|---|---|
Node set |
XPathNodeIterator | Eine ungeordnete Auflistung von Knoten ohne Duplikate, die in der Reihenfolge der Dokumente erstellt wurde. | Select oder Evaluate |
Boolean |
Boolean | Ein true -Wert oder ein false -Wert. |
Evaluate oder Matches |
Number |
Double | Eine Gleitkommazahl. | Evaluate |
String |
String | Eine Folge von UCS-Zeichen. | Evaluate |
Hinweis
Die Matches-Methode akzeptiert einen XPath-Ausdruck als Parameter. Die SelectSingleNode-Methode gibt ein XPathNavigator-Objekt zurück, nicht einen der XPath-Rückgabetypen des W3C.
Die ReturnType-Eigenschaft
Nachdem eine XPath-Abfrage in ein XPathExpression-Objekt kompiliert wurde, können Sie mithilfe der ReturnType-Eigenschaft des XPathExpression-Objekts bestimmen, was die XPath-Abfrage zurückgibt.
Die ReturnType-Eigenschaft gibt einen der folgenden XPathResultType-Enumerationswerte zurück, die die XPath-Rückgabetypen des W3C darstellen:
Im folgenden Beispiel werden mithilfe des XPathExpression-Objekts eine Zahl und eine Knotengruppe aus der Datei books.xml
zurückgegeben. Die ReturnType-Eigenschaft aller XPathExpression-Objekte sowie die Ergebnisse der Evaluate-Methode und der Select-Methode werden in die Konsole geschrieben.
Dim document As XPathDocument = New XPathDocument("books.xml")
Dim navigator As XPathNavigator = document.CreateNavigator()
' Returns a number.
Dim query1 As XPathExpression = navigator.Compile("bookstore/book/price/text()*10")
Console.WriteLine(query1.ReturnType)
Dim number As Double = CType(navigator.Evaluate(query1), Double)
Console.WriteLine(number)
' Returns a node set.
Dim query2 As XPathExpression = navigator.Compile("bookstore/book/price")
Console.WriteLine(query2.ReturnType)
Dim nodes As XPathNodeIterator = navigator.Select(query2)
nodes.MoveNext()
Console.WriteLine(nodes.Current.Value)
XPathDocument document = new XPathDocument("books.xml");
XPathNavigator navigator = document.CreateNavigator();
// Returns a number.
XPathExpression query1 = navigator.Compile("bookstore/book/price/text()*10");
Console.WriteLine(query1.ReturnType);
Double number = (Double)navigator.Evaluate(query1);
Console.WriteLine(number);
// Returns a node set.
XPathExpression query2 = navigator.Compile("bookstore/book/price");
Console.WriteLine(query2.ReturnType);
XPathNodeIterator nodes = navigator.Select(query2);
nodes.MoveNext();
Console.WriteLine(nodes.Current.Value);
In diesem Beispiel wird die Datei books.xml
als Eingabe verwendet.
<?xml version="1.0" encoding="utf-8" ?>
<bookstore>
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Leistungsfähigere XPath-Ausdrücke
Wenn Sie eine bessere Leistung erreichen möchten, verwenden Sie in Ihren Abfragen einen möglichst spezifischen XPath-Ausdruck. Wenn z. B. der book
-Knoten ein untergeordneter Knoten des bookstore
-Knotens ist, und der bookstore
-Knoten ist das oberste Element in einem XML-Dokument, ist die Verwendung des XPath-Ausdrucks /bookstore/book
schneller als die Verwendung von //book
. Der XPath-Ausdruck //book
durchsucht alle Knoten in der XML-Struktur nach übereinstimmenden Knoten.
Darüber hinaus kann die Verwendung der von der XPathNavigator-Klasse bereitgestellten Methoden zur Knotensatznavigation zur Leistungssteigerung der Auswahlmethoden führen, die von der XPathNavigator-Klasse für Fälle mit einfachen Auswahlkriterien bereitgestellt werden. Wenn Sie z. B. den ersten untergeordneten Knoten des aktuellen Knotens auswählen müssen, ist es schneller, die MoveToFirst-Methode zu verwenden, als den XPath-Ausdruck child::*[1]
und die Select-Methode zu verwenden.
Weitere Informationen zu den Methoden der Knotensatznavigation der XPathNavigator-Klasse finden Sie unter Navigieren in Knotengruppen mit XPathNavigator.
Siehe auch
- XmlDocument
- XPathDocument
- XPathNavigator
- Verarbeiten von XML-Daten mithilfe des XPath-Datenmodells
- Auswählen von XML-Daten mit XPathNavigator
- Auswerten von XPath-Ausdrücken mit XPathNavigator
- Vergleich von Knoten mit XPathNavigator
- In XPath-Abfragen erkannte Knotentypen
- XPath-Abfragen und Namespaces