Verwendung von XPath zum Standardnamespace benutzerdefinierte Abfrage


Problembeschreibung


Umdefinieren den Standardnamespace des XML-Dokuments, der internen SelectionNamespaces -Eigenschaft den Standardnamespace und versuchen anschließend programmgesteuert XPath Knoten mithilfe der SelectNodes oder SelectSingleNodes -Methode zurückgegeben werden keine Knoten zurückgegeben.

Problemlösung


Entweder Präfixe mit Namespaces verwenden, wenn Sie die SelectionNamespaces -Eigenschaft oder XPath Extensible Stylesheet Language (XSL) Mustervergleich Operationen anstelle.

Weitere Informationen


Dieses Verhalten ist entwurfsbedingt.

Implementierung von XPath-Abfragen für DOMDocument erfordert dieses Namespaces deklariert werden in der (DOKUMENTOBJEKTMODELL) vor dem Ausführen der Methoden SelectNodes oder ändert .

Schritte zum Reproduzieren des Verhaltens

  1. Erstellen Sie in Visual Basic ein neues Standard-EXE-Projekt. Form1 wird standardmäßig erstellt.
  2. Fügen Sie folgenden Code in das Form_Unload()-Ereignis von 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. Klicken Sie im Menü Projekt auf Verweise. Wählen Sie in der Liste Verfügbare Verweise Microsoft XML, V3. 0 oder höher.
  4. Führen Sie das Projekt aus. Kein XML-Code zurückgegeben.
  5. Kommentieren Sie SetProperty zwei. Hinweis: Alternativ, Sie können zwei Codezeilen wie folgt.
            .setProperty "SelectionNamespaces", "xmlns:myNS='uri:MyNameSpace'"        Set nodeList = .selectNodes("//myNS:Test")

  6. Führen Sie das Projekt aus. Die XML-Knoten werden zurückgegeben.

REFERENZEN

Klicken Sie für weitere Informationen auf die folgende Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen:

294797 wie Namespace Wenn DOM mit XPath Abfragen