Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
En Visual Basic, cree un nuevo proyecto EXE estándar. Form1 se crea de forma predeterminada.
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
En el menú Proyecto , haga clic en Referencias. En la lista de referencias disponibles, seleccione Microsoft XML, v3.0 o posterior.
Ejecuta el proyecto . No se devuelve ningún XML.
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")
Ejecuta el proyecto . Se devuelven los nodos XML.
Referencias
Cómo especificar el espacio de nombres al consultar el DOM con XPath