Cómo recorrer XML con la clase XPathNavigator mediante Visual Basic

Para obtener una versión de Microsoft Visual C# de este artículo, consulte
308343 .
Para obtener una versión de Microsoft Visual Basic 6.0 de este artículo, consulte
271619 .

Resumen

Este artículo paso a paso muestra cómo recorrer documentos del lenguaje de marcado Extensible (XML) con un objeto XPathNavigator creado a partir de un objeto XPathDocument . Este ejemplo carga un objeto XPathDocument con datos XML, crea un objeto XPathNavigator como una vista de los datos y muestra el XML recorriendo el documento.

Requisitos

La lista siguiente describe el hardware, software, infraestructura de red y service packs recomendados que necesita:
  • Microsoft Windows Server 2003, Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server o Microsoft Windows NT 4.0 Server
  • Microsoft Visual Studio 2005 o Microsoft Visual Studio .NET
En este artículo se supone que está familiarizado con los temas siguientes:
  • Terminología XML
  • Crear y leer archivos XML
  • Sintaxis de XML Path Language (XPath)

Cómo utilizar la clase XPathNavigator para recorrer XML

  1. En Visual Studio 2005 o en Visual Studio. NET, cree un Visual Basic 2005 o una aplicación de consola de Visual Basic. NET.

    Nota: Este ejemplo utiliza un archivo denominado Books.xml. Puede crear su propio archivo Books.xml o puede utilizar el ejemplo que se incluye en Quickstarts con el Kit de desarrollo de Software (SDK). NET. Si tiene instalados los tutoriales, archivo Books.xml se encuentra en la carpeta siguiente:
    \Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transformxml\VB
    Como alternativa, puede obtener este archivo, visite el siguiente sitio Web:
    Debe copiar el archivo Books.xml en la carpeta \Bin\Debug que se encuentra en la carpeta en la que creó este proyecto.
  2. Asegúrese de que el proyecto hace referencia el espacio de nombres System.Xml .
  3. Utilice la instrucción Imports en los espacios de nombres Xml y XPath para que no se le pida calificar declaraciones en esos espacios de nombres más adelante en el código. Debe utilizar la instrucción Imports antes que cualquier otra declaración.
    Imports System.XmlImports System.Xml.XPath

  4. Declare las variables apropiadas. Declare un objeto XPathDocument para mantener el documento XML y un objeto XPathNavigator para evaluar expresiones XPath y desplazarse por el documento. Declare un objeto String para almacenar la expresión XPath. Agregue el código de declaración al procedimiento Main de Module1.
    Dim nav As XPathNavigatorDim docNav As XPathDocument

  5. Cargue un objeto XPathDocument con el archivo de ejemplo Books.xml. La clase XPathDocument utiliza Extensible Stylesheet Language Transformations (XSLT) para proporcionar una memoria caché rápida y orientada al rendimiento para procesar documentos XML. Es similar a Document Object Model (DOM) de XML, pero está muy optimizada para procesar XSLT y el modelo de datos XPath.
    'Open the XML.docNav = New XPathDocument("books.xml")

  6. Crear un objeto XPathNavigator a partir del documento. XPathNavigator le permite moverse por los nodos de atributos y los nodos de espacio de nombres en un documento XML.
    'Create a navigator to query with XPath.nav = docNav.CreateNavigator

  7. Vaya a la raíz del documento con el método MoveToRoot . MoveToRoot establece el explorador en el nodo del documento que contiene todo el árbol de nodos.
    'Initial XPathNavigator to start at the root.nav.MoveToRoot()

  8. Utilice el método MoveToFirstChild para ir a los hijos del documento XML. El método MoveToFirstChild mueve al primer hijo del nodo actual. En el caso del origen del archivo Books.xml, se aleja del documento raíz hacia los secundarios, la sección Comentarios y el nodo librería.
    'Move to the first child node (comment field).nav.MoveToFirstChild()

  9. Utilice el método MoveToNext para recorrer nodos en niveles hermanos. Mueve el método MoveToNext va al siguiente hermano del nodo actual.
    'Loop through all the root nodes.Do
    ...
    Loop While nav.MoveToNext

  10. Utilice la propiedad NodeType para asegurarse de que sólo está procesando nodos de elementos y utilice la propiedad Value para mostrar la representación de texto del elemento.
    Do    'Find the first element.
    If nav.NodeType = XPathNodeType.Element Then
    'If children exist.
    If nav.HasChildren Then

    'Move to the first child.
    nav.MoveToFirstChild()

    'Loop through all the children.
    Do
    'Display the data.
    Console.Write("The XML string for this child ")
    Console.WriteLine("is '{0}'", nav.Value)
    Loop While nav.MoveToNext

    End If
    End If
    Loop While nav.MoveToNext

  11. Utilice la propiedad HasAttributes para determinar si un nodo tiene atributos. También puede utilizar otros métodos, como MoveToNextAttribute, para ir a un atributo y examinar su valor. Tenga en cuenta que este segmento de código sólo va por los descendientes del nodo raíz y no a todo el árbol.
    Do    'Find the first element.
    If nav.NodeType = XPathNodeType.Element Then
    'if children exist
    If nav.HasChildren Then

    'Move to the first child.
    nav.MoveToFirstChild()

    'Loop through all the children.
    Do
    'Display the data.
    Console.Write("The XML string for this child ")
    Console.WriteLine("is '{0}'", nav.Value)

    'Check for attributes.
    If nav.HasAttributes Then
    Console.WriteLine("This node has attributes")
    End If
    Loop While nav.MoveToNext

    End If
    End If
    Loop While nav.MoveToNext

  12. Utilice el método ReadLine del objeto Console para agregar una pausa al final de la consola para mostrar más fácilmente los resultados anteriores.
    'Pause.Console.ReadLine()

  13. Genere y ejecute su proyecto de aplicación de consola.

Lista de código completa

Imports System.XmlImports System.Xml.XPath

Module Module1

Sub Main()
Dim nav As XPathNavigator
Dim docNav As XPathDocument
docNav = New XPathDocument("books.xml")
nav = docNav.CreateNavigator
nav.MoveToRoot()
'Move to the first child node (comment field).
nav.MoveToFirstChild()

Do
'Find the first element.
If nav.NodeType = XPathNodeType.Element Then
'if children exist
If nav.HasChildren Then

'Move to the first child.
nav.MoveToFirstChild()

'Loop through all the children.
Do
'Display the data.
Console.Write("The XML string for this child ")
Console.WriteLine("is '{0}'", nav.Value)

'Check for attributes.
If nav.HasAttributes Then
Console.WriteLine("This node has attributes")
End If
Loop While nav.MoveToNext

End If
End If
Loop While nav.MoveToNext

'Pause.
Console.ReadLine()

End Sub

End Module

Referencias

Para obtener más información, visite los siguientes sitios Web de Microsoft Developer Network (MSDN):Para obtener más información, visite el siguiente sitio Web de World Wide Web Consortium (W3C):
XML Path Language (XPath)
Versión 1.0: W3C recomendación 16 de noviembre de 1999
http://www.w3.org/TR/1999/REC-xpath-19991116
Propiedades

Id. de artículo: 301111 - Última revisión: 22 ene. 2017 - Revisión: 1

Comentarios