Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un XPathExpression objeto representa una consulta XPath compilada devuelta desde el método estático Compile de la XPathExpression clase o el Compile método de la XPathNavigator clase .
La clase XPathExpression
Una consulta XPath compilada representada por un XPathExpression objeto es útil si se usa la misma consulta XPath más de una vez.
Por ejemplo, al llamar al Select método varias veces, en lugar de usar una cadena que representa la consulta XPath cada vez, use el Compile método de la XPathExpression clase o el Compile método de la XPathNavigator clase para compilar y almacenar en caché la consulta XPath en un XPathExpression objeto para reutilizar y mejorar el rendimiento.
Una vez compilado, el XPathExpression objeto se puede usar como entrada para los métodos de clase siguientes XPathNavigator en función del tipo devuelto desde la consulta XPath.
En la tabla siguiente se describen cada uno de los tipos de valor devuelto XPath de W3C, sus equivalencias en Microsoft .NET Framework y los métodos con los que puede utilizarse el objeto XPathExpression en función de su tipo de valor devuelto.
Tipo de valor devuelto de XPath del W3C | Tipo equivalente de .NET Framework | Descripción | Métodos |
---|---|---|---|
Node set |
XPathNodeIterator | Una colección no ordenada de nodos sin duplicados creados en el orden del documento. | Select o Evaluate |
Boolean |
Boolean | Un valor true o false . |
Evaluate o Matches |
Number |
Double | Número de punto flotante. | Evaluate |
String |
String | Secuencia de caracteres UCS. | Evaluate |
Nota:
El Matches método acepta una expresión XPath como parámetro. El método SelectSingleNode devuelve un objeto XPathNavigator, no uno de los tipos de valor devueltos de XPath de W3C.
La propiedad ReturnType
Después de compilar una consulta XPath en un XPathExpression objeto, puede usar la ReturnType propiedad del XPathExpression objeto para determinar qué devuelve la consulta XPath.
La ReturnType propiedad devuelve uno de los siguientes XPathResultType valores de enumeración que representan los tipos de retorno de XPath del W3C.
En el ejemplo siguiente se usa el XPathExpression objeto para devolver un número y un conjunto de nodos del books.xml
archivo. La propiedad ReturnType de cada objeto XPathExpression y los resultados de los métodos Evaluate y Select se escriben en la consola.
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);
En el ejemplo se toma el archivo books.xml
como entrada.
<?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>
Expresiones XPath de mayor rendimiento
Para mejorar el rendimiento, use la expresión XPath más específica posible en las consultas. Por ejemplo, si el book
nodo es un nodo secundario del bookstore
nodo y el bookstore
nodo es el elemento más superior de un documento XML, el uso de la expresión /bookstore/book
XPath es más rápido que usar //book
. La //book
expresión XPath examinará todos los nodos del árbol XML para identificar los nodos coincidentes.
Además, el uso de los métodos de navegación del conjunto de nodos proporcionados por la XPathNavigator clase puede dar lugar a un rendimiento mejorado sobre los métodos de selección proporcionados por la XPathNavigator clase en casos en los que los criterios de selección son simples. Por ejemplo, si tiene que seleccionar el primer nodo secundario del nodo actual, es más rápido utilizar el método MoveToFirst que la expresión XPath child::*[1]
y el método Select.
Para obtener más información sobre los métodos de navegación del conjunto de nodos de la XPathNavigator clase , vea Navegación de conjunto de nodos mediante XPathNavigator.
Consulte también
- XmlDocument
- XPathDocument
- XPathNavigator
- Procesar datos XML mediante el modelo de datos XPath
- Selección de datos XML mediante XPathNavigator
- Evaluación de expresiones XPath mediante XPathNavigator
- Coincidencia de nodos con XPathNavigator
- Tipos de nodo reconocidos con consultas XPath
- Espacios de nombres y consultas XPath