Condividi tramite


Espressioni XPath compilate

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

Classe XPathExpression

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

Ad esempio, quando si chiama il Select metodo più volte, anziché usare una stringa che rappresenta la query XPath ogni volta, usare il Compile metodo della XPathExpression classe o il Compile metodo della XPathNavigator classe per compilare e memorizzare nella cache la query XPath in un XPathExpression oggetto per riutilizzare e migliorare le prestazioni.

Dopo la compilazione, l'oggetto XPathExpression può essere usato come input per i metodi di classe seguenti XPathNavigator a seconda del tipo restituito dalla query XPath.

Nella tabella seguente vengono descritti i tipi restituiti W3C XPath, gli equivalenti di Microsoft .NET Framework e i metodi con cui l'oggetto XPathExpression può essere usato in base al tipo restituito.

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

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

Annotazioni

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

Proprietà ReturnType

Dopo la compilazione di una query XPath in un XPathExpression oggetto , è possibile utilizzare la ReturnType proprietà dell'oggetto XPathExpression per determinare la restituzione della query XPath.

La ReturnType proprietà restituisce uno dei valori di enumerazione seguenti XPathResultType che rappresentano i tipi restituiti XPath W3C.

Nell'esempio seguente viene utilizzato l'oggetto XPathExpression per restituire un numero e un set di nodi dal books.xml file. La ReturnType proprietà di ogni XPathExpression oggetto e i risultati dei Evaluate metodi 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);  

L'esempio accetta il file books.xml 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 con prestazioni superiori

Per prestazioni migliori, usare l'espressione XPath più specifica possibile nelle query. Ad esempio, se il book nodo è un nodo figlio del bookstore nodo e il bookstore nodo è l'elemento più in alto in un documento XML, l'utilizzo dell'espressione /bookstore/book XPath è più veloce rispetto all'uso //bookdi . L'espressione //book XPath analizzerà ogni nodo nell'albero XML per identificare i nodi corrispondenti.

Inoltre, l'uso dei metodi di navigazione del set di nodi forniti dalla XPathNavigator classe può comportare prestazioni migliori sui metodi di selezione forniti dalla XPathNavigator classe nei casi in cui i criteri di selezione sono semplici. Ad esempio, se è necessario selezionare il primo elemento figlio del nodo corrente, è più veloce usare il MoveToFirst metodo che usare l'espressione child::*[1] XPath e il Select metodo .

Per altre informazioni sui metodi di spostamento del set di nodi della XPathNavigator classe , vedere Spostamento nel set di nodi tramite XPathNavigator.

Vedere anche