Condividi tramite


Espressioni XPath compilate

Un oggetto XPathExpression rappresenta una query XPath compilata che viene restituita dal metodo statico Compile della classe XPathExpression oppure dal metodo Compile della classe XPathNavigator.

Classe XPathExpression

Una query XPath compilata rappresentata da un oggetto XPathExpression risulta utile se la stessa query XPath viene usata più volte.

Ad esempio, se si chiama il metodo Select più volte, anziché usare ogni volta una stringa che rappresenti la query XPath, è possibile usare il metodo Compile della classe XPathExpression oppure il metodo Compile della classe XPathNavigator per compilare e memorizzare nella cache la query XPath in un oggetto XPathExpression e poterla riutilizzare migliorando le prestazioni.

Una volta compilato, l'oggetto XPathExpression può essere usato come input ai seguenti metodi della classe XPathNavigator in base al tipo restituito dalla query XPath.

Nella tabella seguente vengono descritti ciascun tipo W3C XPath restituito, il tipo equivalente di Microsoft .NET Frameworks e i metodi che possono essere usati dall'oggetto XPathExpression in base al relativo tipo restituito.

Tipo W3C XPath restituito Tipo equivalente di .NET Framework Descrizione Metodi
Node set XPathNodeIterator Raccolta non ordinata di nodi senza duplicati creati in ordine di documento. Select oppure Evaluate
Boolean Boolean Valore true o false. Evaluate oppure

Matches
Number Double Un numero a virgola mobile. Evaluate
String String Sequenza di caratteri UCS. Evaluate

Nota

Il metodo Matches accetta come parametro un'espressione XPath. Il metodo SelectSingleNode restituisce un oggetto XPathNavigator e non uno dei tipi W3C XPath restituiti.

Proprietà ReturnType

Una volta compilata una query XPath in un oggetto XPathExpression, è possibile usare la proprietà ReturnType dell'oggetto XPathExpression per determinare ciò che restituisce la query XPath.

La proprietà ReturnType restituisce uno dei seguenti valori di enumerazione XPathResultType che rappresenta il tipo W3C XPath restituito.

Nell'esempio seguente viene usato l'oggetto XPathExpression per restituire un numero e un set di nodi dal file books.xml. La proprietà ReturnType di ciascun oggetto XPathExpression e i risultati dai metodi Evaluate e Select vengono scritti nella 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);  

Nell'esempio il file books.xml viene considerato come input.

<?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>

Espressioni XPath a prestazioni più elevate

Per ottimizzare le prestazioni, si consiglia di usare l'espressione XPath più specifica possibile nelle query. Ad esempio, se il nodo book è un nodo figlio del nodo bookstore e il nodo bookstore è l'elemento principale di un documento XML, l'uso dell'espressione XPath /bookstore/book garantisce una velocità maggiore rispetto all'utilizzo di //book. Per identificare i nodi corrispondenti, infatti, l'espressione XPath //book eseguirà l'analisi di ciascun nodo nell'albero XML.

Inoltre, nei casi in cui i criteri di selezione sono semplici, l'uso dei metodi di navigazione dei set di nodi forniti dalla classe XPathNavigator può garantire un livello di prestazioni più elevato rispetto a quello fornito dai metodi della classe XPathNavigator. Ad esempio, se è necessario selezionare il primo nodo figlio del nodo corrente, risulta più veloce usare il metodo MoveToFirst anziché l'espressione XPath child::*[1] e il metodo Select.

Per altre informazioni sui metodi di navigazione del set di nodi della classe XPathNavigator, vedere Navigazione del set di nodi con XPathNavigator.

Vedi anche