L’utilisation de XPath pour interroger des noms définis par l’utilisateur


Symptômes


Redéfinir l’espace de noms par défaut dans le document XML, modifier la propriété SelectionNamespaces interne pour l’espace de noms par défaut, et réessayez d’utiliser XPath pour renvoyer les nœuds à l’aide de la méthode selectNodes ou selectSingleNodes , aucuns nœuds ne sont retournés.

Résolution


Soit utiliser les préfixes avec les espaces de noms lorsque vous spécifiez la propriété SelectionNamespaces , ou utilisez des opérations de correspondance Extensible Stylesheet Language (XSL) au lieu de XPath.

Plus d'informations


Ce comportement est voulu par la conception.

Mise en œuvre de requêtes XPath sur le DOMDocument requiert ces espaces de noms est déclaré dans le modèle DOM (Document Object) avant l’exécutent des méthodes selectNodes ou selectSingleNode .

Procédure pour reproduire le comportement

  1. Dans Visual Basic, créez un nouveau projet EXE Standard. Form1 est créé par défaut.
  2. Collez le code suivant dans l’événement Form_Unload() 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. Dans le menu projet , cliquez sur références. Dans la liste des références disponibles, sélectionnez Microsoft XML, version 3.0 ou une version ultérieure.
  4. Exécutez le projet. Aucun XML n’est renvoyé.
  5. Commentez les deux méthodes setProperty . Remarque: vous pouvez également modifier les deux lignes de code comme suit.
            .setProperty "SelectionNamespaces", "xmlns:myNS='uri:MyNameSpace'"        Set nodeList = .selectNodes("//myNS:Test")

  6. Exécutez le projet. Les nœuds XML sont retournés.

RÉFÉRENCES

Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :

294797 comment spécifier Namespace lors de l’interrogation du modèle DOM avec XPath