Het gebruik van XPath voor de query op een standaard die door de gebruiker gedefinieerde naamruimte


Symptomen


De standaardnaamruimte van het XML-document te definiëren, de interne SelectionNamespaces -eigenschap voor de standaardnaamruimte wijzigen en vervolgens probeert programmacode XPath te knooppunten als resultaat geven met de methode selectNodes of selectSingleNodes geen knooppunten als resultaat gegeven.

Oplossing


De voorvoegsels met de naamruimten gebruiken wanneer u de eigenschap SelectionNamespaces of Extensible Stylesheet Language (XSL) patroonvergelijking bewerkingen in plaats van XPath gebruiken.

Meer informatie


Dit gedrag is inherent aan het ontwerp.

Implementatie van een XPath-query's op de DOMDocument vereist die naamruimten worden gedeclareerd als in het Document Object Model (DOM) voordat de methode selectNodes of selectSingleNode worden uitgevoerd.

Stappen om het gedrag te reproduceren

  1. Maak een nieuw standaard-EXE-project in Visual Basic. Form1 wordt standaard gemaakt.
  2. Plak de volgende code in de gebeurtenis Form_Unload() van 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. Klik op verwijzingenin het menu Project . Selecteer in de lijst met beschikbare verwijzingen Microsoft XML, v3.0 of hoger.
  4. Het project wordt uitgevoerd. Geen XML wordt geretourneerd.
  5. Commentaar van de twee methoden voor setProperty . Opmerking: als alternatief kunt u de twee regels met code als volgt.
            .setProperty "SelectionNamespaces", "xmlns:myNS='uri:MyNameSpace'"        Set nodeList = .selectNodes("//myNS:Test")

  6. Het project wordt uitgevoerd. De XML-knooppunten zijn geretourneerd.

VERWIJZINGEN

Voor meer informatie klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:

294797 het opgeven van de naamruimte bij het opvragen van de DOM met XPath