Expressions XPath compilées
Un objet XPathExpression représente une requête XPath compilée retournée depuis la méthode statique Compile de la classe XPathExpression ou depuis la méthode Compile de la classe XPathNavigator.
La classe XPathExpression
Une requête XPath compilée représentée par un objet XPathExpression est utile si la même requête XPath doit être utilisée plusieurs fois.
Par exemple, lorsque la méthode Select doit être appelée plusieurs fois, au lieu d'utiliser chaque fois une chaîne représentant la requête XPath, utilisez la méthode Compile de la classe XPathExpression ou la méthode Compile de la classe XPathNavigator pour compiler et mettre en cache la requête XPath dans un objet XPathExpression afin de pouvoir la réutiliser et d'améliorer ainsi les performances.
Une fois compilé, l’objet XPathExpression peut être utilisé comme entrée des méthodes suivantes de la classe XPathNavigator selon le type retourné par la requête XPath.
Le tableau suivant décrit chacun des types de retours XPath W3C, leurs équivalents Microsoft .NET Framework et les méthodes avec lesquelles l'objet XPathExpression peut être utilisé selon le type de retour.
Type de retour XPath W3C | Type .NET Framework équivalent | Description | Méthodes |
---|---|---|---|
Node set |
XPathNodeIterator | Une collection non triée des nœuds sans doublons créés dans l’ordre du document. | Select ou Evaluate |
Boolean |
Boolean | Une valeur true ou false . |
Evaluate ou Matches |
Number |
Double | Nombre à virgule flottante. | Evaluate |
String |
String | Séquence de caractères UCS. | Evaluate |
Notes
La méthode Matches accepte une expression XPath comme paramètre. La méthode SelectSingleNode retourne un objet XPathNavigator, pas un des types de retours XPath W3C.
La propriété ReturnType
Une fois qu'une requête XPath a été compilée dans un objet XPathExpression, vous pouvez utiliser la propriété ReturnType de l'objet XPathExpression pour déterminer ce que retourne la requête XPath.
La propriété ReturnType retourne une des valeurs d'énumération XPathResultType suivantes, représentant les types de retours XPath W3C.
L'exemple suivant utilise l'objet XPathExpression pour retourner un nombre et une collection de nœuds à partir du fichier books.xml
. La propriété ReturnType de chaque objet XPathExpression ainsi que les résultats des méthodes Evaluate et Select sont écrits à la console.
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);
L'exemple prend le fichier books.xml
comme entrée.
<?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>
Expressions XPath plus performantes
Pour obtenir des performances optimales, utilisez l'expression XPath la plus spécifique possible dans vos requêtes. Par exemple, si le nœud book
est un enfant du noeud bookstore
et si le nœud bookstore
est l'élément de niveau supérieur dans un document XML, il est plus rapide d'utiliser l'expression XPath /bookstore/book
que //book
. L’expression XPath //book
analysera en effet chaque nœud de l’arborescence XML en vue d’identifier les nœuds qui correspondent.
De plus, l'utilisation des méthodes de navigation dans les nœuds fournies par la classe XPathNavigator peut améliorer les performances par rapport aux méthodes de sélection fournies par la classe XPathNavigator lorsque les critères de sélection sont simples. Par exemple, si vous devez sélectionner le premier enfant du nœud actuel, il est plus rapide d’utiliser la méthode MoveToFirst que d’utiliser l’expression XPath child::*[1]
et la méthode Select.
Pour plus d'informations sur les méthodes de navigation dans les nœuds fournies par la classe XPathNavigator, consultez Navigation dans la collection de nœuds à l’aide de XPathNavigator.
Voir aussi
- XmlDocument
- XPathDocument
- XPathNavigator
- Traitement des données XML à l’aide du modèle de données XPath
- Sélection de données XML à l'aide de XPathNavigator
- Évaluation d’expressions XPath à l’aide de XPathNavigator
- Mise en correspondance de nœuds avec XPathNavigator
- Types de nœuds reconnus avec les requêtes XPath
- Requêtes et espaces de noms XPath