lunes, 24 de noviembre de 2008

Cómo consultar XML con una expresión XPath mediante Visual Basic .NET

Poco a poco voy conociendo las enormes posibilidades que ofrece Xpath y el trabajo con ficheros XML. Lo primero que necesitba hacer es realizar una simple consulta Xpath sobre un fichero Xml. Estos son los pasos que hay que seguir:

1 - Importar los siguientes espacios de nombres

Imports System.Xml
Imports System.Xml.XPath

2 - Declarar XPathDocument para contener el documento XML, un objeto XpathNavigator para evaluar las expresiones XPath y un objeto XPathNodeIterator para recorrer los nodos seleccionados. Declare un objeto String para contener las expresiones XPath.

Dim nav As XPathNavigator
Dim docNav As XPathDocument
Dim NodeIter As XPathNodeIterator
Dim strExpression As String

3 - Abrir el fichero xml

docNav = New XPathDocument("books.xml")

4 - Crear un XPathNavigator a partir del documento

nav = docNav.CreateNavigator

5 - Guardar en la variable string la expresión Xpath a evaluar y ejecutar esa expresión.

strExpression = "/bookstore/book/title[../price>10.00]"
NodeIter = nav.Select(strExpression)

6 - Recorrernos los nodos para ver los resultados (o el resultado, si solo hay uno)

While (NodeIter.MoveNext())
Console.WriteLine("Book Title: {0}", NodeIter.Current.Value)
End While


En realidad este ejemplo es mucho más sencillo de lo que parece (y más corto). Aquí os pongo otro ejemplillo en unas pocas líneas:

Dim nav As XPathNavigator
Dim docNav As XPathDocument
Dim NodeIter As XPathNodeIterator
Dim strExpression As String

'Abrimos el xml
docNav = New XPathDocument("mifichero.xml")

'Creamos el navegador para consultar con XPath.
nav = docNav.CreateNavigator

'Expresión de búsqueda XPath
strExpression = ""//datos/registro[contains(.,'prueba')]"

'Consultamos
NodeIter = nav.Select(strExpression)

If NodeIter.Count > 0 Then
While NodeIter.MoveNext()
messagebox.show(NodeIter.Current.Value)
End While
Else
'No se ha encontrado
MessageBox.Show("no encontrado")
End If



Fuente Microsoft

No hay comentarios: