Compartir a través de


Uso de XPath para consultar en un espacio de nombres predeterminado definido por el usuario

En este artículo se describe cómo usar XPath para consultar en un espacio de nombres predeterminado definido por el usuario y proporciona código para reproducir el comportamiento.

Versión original del producto: Visual Basic
Número de KB original: 288147

Síntomas

Al redefinir el espacio de nombres predeterminado en el documento XML, cambie la propiedad interna SelectionNamespaces del espacio de nombres predeterminado y, a continuación, intente usar XPath mediante programación para devolver nodos mediante el selectNodes método o selectSingleNodes , no se devuelve ningún nodo.

Solución

Utilice prefijos con los espacios de nombres cuando especifique la propiedad SelectionNamespaces, o realice operaciones de coincidencia de patrones del Lenguaje de Hojas de Estilo Extensibles (XSL) en lugar de utilizar XPath.

Más información

Este comportamiento es por diseño.

La implementación de consultas XPath en DOMDocument requiere que los espacios de nombres se declaren en el Modelo de Objetos de Documento (DOM) antes de que se ejecuten los métodos selectNodes o selectSingleNode.

Pasos para reproducir el comportamiento

  1. En Visual Basic, cree un nuevo proyecto EXE estándar. Form1 se crea de forma predeterminada.

  2. Pegue el siguiente código en el Form_Unload() evento de Form1.

    ' You can change the ProgID to reflect the installed version of the Microsoft XML Parser:
    ' For example, with MSXML 6, you would use:
    ' Dim xmlDom As MSXML2.DOMDocument60
    Dim xmlDom As MSXML2.DOMDocument
    Dim nodeList As MSXML2.IXMLDOMNodeList
    Dim iNode As MSXML2.IXMLDOMNode
    
    ' For example, with MSXML 6, you would use:
    ' Set xmlDom = New MSXML2.DOMDocument60
    
    Set xmlDom = New MSXML2.DOMDocument
    
    With xmlDom
        .async = False
        .loadXML "<?xml version='1.0'?>" & _
        "<Root xmlns='uri:MyNameSpace'>" & _
        " <Test>This is a Test</Test>" & _
        "</Root>"
        .setProperty "SelectionLanguage", "XPath"
        .setProperty "SelectionNamespaces", "xmlns='uri:MyNameSpace'"
        Set nodeList = .selectNodes("//Test")
    End With
    
    For Each iNode In nodeList
        msgbox iNode.xml
    Next iNode
    
  3. En el menú Proyecto , haga clic en Referencias. En la lista de referencias disponibles, seleccione Microsoft XML, v3.0 o posterior.

  4. Ejecuta el proyecto . No se devuelve ningún XML.

  5. Comente los dos setProperty métodos.

    Nota:

    Como alternativa, puede modificar las dos líneas de código de la siguiente manera.

    .setProperty "SelectionNamespaces", "xmlns:myNS='uri:MyNameSpace'"
    Set nodeList = .selectNodes("//myNS:Test")
    
  6. Ejecuta el proyecto . Se devuelven los nodos XML.

Referencias

Cómo especificar el espacio de nombres al consultar el DOM con XPath