Cómo: Ejecutar consultas XPath utilizando las clases System.Xml.XPath

Seleccione idioma Seleccione idioma
Id. de artículo: 317069 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo paso a paso se muestra cómo utilizar las clases en el espacio de nombres System.Xml.XPath para ejecutar consultas XPath en aplicaciones .NET.

Explorar el espacio de nombres System.Xml.XPath

El espacio de nombres System.Xml.XPath contiene el analizador XPath y el motor de evaluación de .NET Framework. El espacio de nombres System.Xml.XPath admite la recomendación de versión 1.0 de XML Path Language (XPath) de World Wide Web Consortium (W3C). Para obtener más información acerca de la recomendación XPath, visite el siguiente sitio Web de W3C:
XML Path Language (XPath) Version 1.0
El espacio de nombres System.Xml.XPath también contiene las clases siguientes que están optimizadas para ejecutar consultas XPath y desplazarse por los conjuntos de resultados generado mediante programación:
  • XPathDocument : leer un alto rendimiento - caché sólo para procesar documentos XML y secuencias. XPathDocument está optimizada para procesamiento de XSLT (Extensible Stylesheet Language Transformation) y el modelo de datos XPath. XPathDocument se utiliza el modelo de objeto de documento (DOM) - se basa el modelo de análisis (carga el código XML de origen en una estructura de árbol en memoria) pero no implementa las interfaces necesarias para insertar, modificar o eliminar nodos de un documento de lenguaje de marcado extensible (XML) o una secuencia.
  • XPathNavigator : esta clase se basa en el modelo de datos XPath. XPathNavigator proporciona los métodos necesarios para ejecutar consultas XPath contra datos XML cargados en un XPathDocument . XPathNavigator se crea una instancia mediante el método CreateNavigator de un objeto XPathDocument . También puede utilizar XPathNavigator para compilar expresiones de consulta XPath ejecutadas con frecuencia y generar un objeto System.Xml.XPath.XPathExpression que encapsula la consulta compilada.
  • XPathNodeIterator : proporciona un iterador sólo - sólo, lectura - directa. Cuando utilice el método SELECT de un objeto XPathNavigator para ejecutar una consulta XPath, se crea una instancia de clase XPathNodeIterator . Puede utilizar XPathNodeIterator para desplazarse por el conjunto de resultados generado por la consulta XPath.
  • XPathExpression : encapsula una expresión de consulta de XPath compilada. Una expresión de consulta de XPath debe compilar antes de poder ejecutar la expresión de consulta. Una expresión XPath compilada contiene sintaxis que se comprueba para cumplir la especificación de lenguaje de consulta XPath de W3C. Una llamada al método de compilación de un objeto XPathNavigator devuelve la clase XPathExpression . Normalmente, se utiliza XPathExpression para proporcionar una expresión de consulta de XPath precompilada en una llamada al método SELECT de un objeto XPathNavigator .
  • XPathException : excepción de .NET Framework que se genera cuando se produce un error al procesar una expresión de consulta de XPath. El método SELECT y el método Compile de la clase XPathNavigator pueden provocar XPathException .

Crear documentos XML de ejemplo

Para crear dos documentos XML de ejemplo para utilizar con el ejemplo de código de .NET posteriores, siga estos pasos:
  1. Utilizar Bloc de notas o un editor de texto similar para pegar el código siguiente en un nuevo documento XML llamado Books.Xml. Guarde el documento en la carpeta raíz del disco duro.
    <?xml version='1.0'?>
    <Books>
    <Book>
      <Title>Beginning XML</Title>
      <Publisher>Wrox</Publisher>
    </Book>
    <Book>
      <Title>XML Step by Step</Title>
      <Publisher>MSPress</Publisher>
    </Book>
    <Book>
      <Title>Professional XML</Title>
      <Publisher>Wrox</Publisher>
    </Book>
    <Book>
      <Title>Developing XML solutions</Title>
      <Publisher>MSPress</Publisher>
    </Book>
    </Books>
    					
  2. Utilizar Bloc de notas o un editor de texto similar para pegar el código siguiente en un nuevo documento XML denominado DotNetBooks.xml. Guarde el documento en la carpeta raíz del disco duro.
    <?xml version='1.0'?>
    <DotNetBooks>
    <DotNetBook>
      <Title>Professional C#</Title>
      <Publisher>Wrox</Publisher>
    </DotNetBook>
    <DotNetBook>
      <Title>ADO.Net Core Reference</Title>
      <Publisher>MSPress</Publisher>
    </DotNetBook>
    <DotNetBook>
      <Title>Professional VB.Net</Title>
      <Publisher>Wrox</Publisher>
    </DotNetBook>
    <DotNetBook>
      <Title>Inside C#</Title>
      <Publisher>MSPress</Publisher>
    </DotNetBook>
    </DotNetBooks>

Crear un proyecto de Visual Basic .NET

  1. Inicie Visual Studio .NET y cree un nuevo proyecto de aplicación de Windows de .NET de Visual Basic.
  2. Arrastre dos controles Button desde el cuadro de herramientas a Form1.vb.
  3. Pegue el código siguiente en el procedimiento Click_Event del primer botón de comando:
    'Instantiate the XPathDocument class.
    Dim xmldoc As New System.Xml.XPath.XPathDocument("c:\books.xml")
    
    'Instantiate the XPathNavigator class.
    Dim nav As System.Xml.XPath.XPathNavigator = xmldoc.CreateNavigator()
    
    'Instantiate the XPathIterator class.
    Dim iterator As System.Xml.XPath.XPathNodeIterator = nav.Select("//Publisher[. = 'MSPress']/parent::node()/Title")
    
    'Use the XPathIterator class to navigate through the generated resultset
    'and then display the selected Titles.
    Do While iterator.MoveNext
        System.Diagnostics.Debug.WriteLine(iterator.Current.Value)
    Loop
    					
  4. Lea los comentarios en línea para comprender la funcionalidad del código. Preste atención específica a cómo el código crea y utiliza instancias de objeto de cada una de las clases en el espacio de nombres System.Xml.XPath . Tenga en cuenta que una cadena especifica el parámetro de expresión de consulta de XPath en la llamada al método SELECT del objeto XPathNavigator .
  5. Pegue el código siguiente en el procedimiento Click_Event del segundo botón de comando:
    'Construct the XPathDocument by specifying the path to Books.xml.
    Dim xmldoc As New System.Xml.XPath.XPathDocument("c:\books.xml")
    
    'Create the XPathNavigator.
    Dim nav As System.Xml.XPath.XPathNavigator = xmldoc.CreateNavigator()
    
    'Compile the XPath query expression to identify all MSPress Titles.
    'The Compile method of the XPathNavigator generates an XPathExpression object
    'that encapsulates the compiled query expression.
    
    Dim expr As System.Xml.XPath.XPathExpression = nav.Compile("//Publisher[. = 'MSPress']/parent::node()/Title")
    
    'Execute the Select method of the XPathNavigator to create the XPathNodeIterator.
    'Note that the sample code supplies the XPathExpression object as the query expression parameter.
    Dim iterator As System.Xml.XPath.XPathNodeIterator = nav.Select(expr)
    
    System.Diagnostics.Debug.WriteLine("MSPress titles in books.xml...")
    System.Diagnostics.Debug.WriteLine("******************************")
    
    'Use the iterator to navigate the generated resultset.
    Do While iterator.MoveNext
        System.Diagnostics.Debug.WriteLine(iterator.Current.Value)
    Loop
    
    
    'Release the XPathDocument and XPathNavigator.
    xmldoc = Nothing
    nav = Nothing
    
    System.Diagnostics.Debug.WriteLine(vbCrLf & "MSPress titles in DotNetBooks.xml...")
    System.Diagnostics.Debug.WriteLine("******************************")
    
    'Specify the path to DotNetBooks.xml to reconstruct the XPathDocument.
    xmldoc = New System.Xml.XPath.XPathDocument("c:\DotNetBooks.xml")
    
    'Create the XPathNavigator.
    nav = xmldoc.CreateNavigator()
    
    'Reuse the XPathExpression that you compiled previously to locate
    'all MSPress titles in DotNetBooks.xml.
    
    'You can reuse the XPathExpression because the hierarchy of elements that are referenced
    'in the XPath query is the same in Books.xml and DotNetBooks.xml. 
    'For example, the Publisher element is a child of the Title element in both XML documents.
    'The hierarchy must be identical for you to reuse the same XPathExpression object
    'across different XML documents/streams.
    
    'When you use an XPathExpression object, and the Select method executes,
    'the XPath query is not recompiled. 
    
    iterator = nav.Select(expr)
    
    'Use the iterator to navigate the generated resultset.
    Do While iterator.MoveNext
         System.Diagnostics.Debug.WriteLine(iterator.Current.Value)
    Loop
    					
  6. Lea los comentarios en línea para comprender la funcionalidad del código. Preste atención específica a cómo el código de ejemplo crea una instancia del objeto XPathExpression la primera vez (contra Books.XML) y, a continuación, vuelve a utilizar el objeto cuando la consulta XPath ejecuta la segunda vez (contra DotNetBooks.xml).

El proyecto de prueba

  1. Guardar los cambios en el proyecto de Visual Basic .NET y, a continuación, ejecutar el proyecto.
  2. Cuando aparezca el formulario, haga clic en el primer botón de comando para ejecutar el código que utiliza una cadena para especificar la expresión de consulta de XPath. El resultado de la consulta XPath especificada contra Books.XML aparece como sigue:
    XML Step by Step
    Developing XML solutions
    					
  3. Haga clic en el segundo botón de comando para ejecutar el código que utiliza un objeto XPathExpression para especificar la expresión de consulta de XPath. El resultado de la consulta XPath especificada contra Books.XML y DotNetBooks.xml aparece como sigue:
    MSPress titles in books.xml...
    ******************************
    XML Step by Step
    Developing XML solutions
    
    MSPress titles in DotNetBooks.xml...
    ******************************
    ADO.Net Core Reference
    Inside C#
    					

Propiedades

Id. de artículo: 317069 - Última revisión: viernes, 12 de agosto de 2005 - Versión: 4.2
La información de este artículo se refiere a:
  • Microsoft .NET Framework 1.1
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.0
Palabras clave: 
kbmt kbhowtomaster KB317069 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 317069

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com