Partager via


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