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 utilizzata più volte.

Ad esempio, se si chiama il metodo Select più volte, anziché utilizzare ogni volta una stringa che rappresenti la query XPath, è possibile utilizzare 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 utilizzato 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 utilizzati 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 o Evaluate

Boolean

Boolean

Valore true o false.

Evaluate o

Matches

Number

Double

Numero a virgola mobile.

Evaluate

String

String

Sequenza di caratteri UCS.

Evaluate

NotaNota

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 utilizzare 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 utilizzato 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 utilizzare 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'utilizzo 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 nella struttura ad albero XML.

Inoltre, nei casi in cui i criteri di selezione sono semplici, l'utilizzo 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 utilizzare il metodo MoveToFirst anziché l'espressione XPath child::*[1] e il metodo Select.

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

Vedere anche

Riferimenti

XmlDocument

XPathDocument

XPathNavigator

Concetti

Elaborazione di dati XML con il modello di dati XPath

Selezione di dati XML con XPathNavigator

Valutazione di espressioni XPath con XPathNavigator

Corrispondenza di nodi utilizzando XPathNavigator

Tipi di nodo riconosciuti con le query XPath

Query e spazi dei nomi XPath