Navegar por XML con la clase XPathNavigator mediante Visual Basic

En este artículo se describen algunos pasos de ejemplo y código de ejemplo para navegar por XML mediante la XPathNavigator clase en Visual Basic 2005 o en Visual Basic .NET.

Versión original del producto: Visual Basic 2005, Visual Basic .NET
Número de KB original: 301111

Resumen

En este artículo paso a paso se muestra cómo navegar por documentos de lenguaje de marcado extensible (XML) con un XPathNavigator objeto creado a partir de un XPathDocument objeto. En este ejemplo se carga un XPathDocument objeto con datos XML, se crea un XPathNavigator objeto como una vista en los datos y se muestra el XML caminando por el documento.

Para obtener una versión de Microsoft Visual C# de este artículo, consulte Uso de Visual C# para navegar por documentos XML con la clase XPathNavigator.

Requisitos

En la lista siguiente se describen el hardware, el software, la infraestructura de red y los Service Pack recomendados que necesita:

  • Windows Server 2003, Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server o Windows NT 4.0 Server
  • Visual Studio 2005 o Visual Studio .NET

En este artículo se supone que está familiarizado con los temas siguientes:

  • Terminología XML
  • Creación y lectura de archivos XML
  • Sintaxis del lenguaje de ruta de acceso XML (XPath)

Uso de la clase XPathNavigator para navegar por XML

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

    Nota:

    En este ejemplo se usa un archivo denominado Books.xml. Puede crear su propio archivo Books.xml o puede usar el ejemplo que se incluye con los inicios rápidos del Kit de desarrollo de software (SDK) de .NET. Si tiene instalados los inicios rápidos, Books.xml se encuentra en la carpeta : \Program Files\Microsoft.NET\FrameworkSDK\Samples\Quickstart\Howto\Samples\Xml\Transformxml\VB

    Como alternativa, puede obtener este archivo visitando: Archivo XML de ejemplo (books.xml)

    Debe copiar Books.xml en la \Bin\Debug carpeta que se encuentra bajo la carpeta en la que creó este proyecto.

  2. Asegúrese de que el proyecto hace referencia al espacio de System.Xml nombres.

  3. Use la Imports instrucción en los Xml espacios de nombres y XPath para que no sea necesario calificar las declaraciones en esos espacios de nombres más adelante en el código. Debe usar la Imports instrucción antes de cualquier otra declaración.

    Imports System.Xml
    Imports System.Xml.XPath
    
  4. Declare las variables adecuadas. Declare un XPathDocument objeto para contener el documento XML y un XPathNavigator objeto para evaluar las expresiones XPath y desplazarse por el documento. Declare un objeto String para contener la expresión XPath. Agregue el código de declaración en el procedimiento Main en Module1.

    Dim nav As XPathNavigator
    Dim docNav As XPathDocument
    
  5. Cargue un XPathDocument objeto con el archivo Books.xmlde ejemplo . La XPathDocument clase usa transformaciones de lenguaje de hoja de estilos extensibles (XSLT) para proporcionar una caché rápida y orientada al rendimiento para el procesamiento de documentos XML. Es similar al modelo de objetos de documento (DOM) XML, pero está altamente optimizado para el procesamiento XSLT y el modelo de datos XPath.

    'Open the XML.
    docNav = New XPathDocument("books.xml")
    
  6. Cree un XPathNavigator objeto a partir del documento. XPathNavigator permite desplazarse por los nodos de atributos y los nodos de espacio de nombres de un documento XML.

    'Create a navigator to query with XPath.
    nav = docNav.CreateNavigator
    
  7. Vaya a la raíz del documento con el MoveToRoot método . MoveToRoot establece el navegador en el nodo de documento que contiene todo el árbol de nodos.

    'Initial XPathNavigator to start at the root.
    nav.MoveToRoot()
    
  8. Use el MoveToFirstChild método para pasar a los elementos secundarios del documento XML. El MoveToFirstChild método se mueve al primer elemento secundario del nodo actual. En el caso del Books.xml origen, se está alejando del documento raíz a los elementos secundarios, la Comment sección y el nodo Bookstore.

    'Move to the first child node (comment field).
    nav.MoveToFirstChild()
    
  9. Use el MoveToNext método para recorrer en iteración los nodos en el nivel del mismo nivel. El MoveToNext método se mueve al siguiente elemento del mismo nivel del nodo actual.

    'Loop through all the root nodes.
    Do
    ...
    Loop While nav.MoveToNext
    
  10. Use la NodeType propiedad para asegurarse de que solo está procesando nodos de elemento y use la Value propiedad 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. Use la HasAttributes propiedad para determinar si un nodo tiene atributos. También puede usar otros métodos, como MoveToNextAttribute, para pasar a un atributo e inspeccionar su valor.

    Nota:

    Este segmento de código solo recorre los descendientes del nodo raíz y no 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. Use el ReadLine método del Console objeto para agregar una pausa al final de la pantalla de la consola para mostrar más fácilmente los resultados anteriores.

    'Pause.
    Console.ReadLine()
    
  13. Compile y ejecute el proyecto de aplicación de consola.

Lista de código completa

Imports System.Xml
Imports 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