Delen via


XPath gebruiken om een query uit te voeren op een door de gebruiker gedefinieerde standaardnaamruimte

In dit artikel wordt beschreven hoe u XPath gebruikt om een query uit te voeren op een door de gebruiker gedefinieerde standaardnaamruimte en code biedt om het gedrag te reproduceren.

Oorspronkelijke productversie: Visual Basic
Oorspronkelijk KB-nummer: 288147

Symptomen

Wanneer u de standaardnaamruimte in het XML-document opnieuw definieert, wijzigt u de interne SelectionNamespaces eigenschap voor de standaardnaamruimte en probeert u vervolgens XPath programmatisch te gebruiken om knooppunten te retourneren met behulp van de selectNodes of selectSingleNodes methode, worden er geen knooppunten geretourneerd.

Resolutie

Gebruik voorvoegsels met de naamruimten wanneer u de SelectionNamespaces eigenschap opgeeft of gebruik XSL-patroonkoppelingsbewerkingen (Extensible Stylesheet Language) in plaats van XPath.

Meer informatie

Dit is zo ontworpen.

Voor de implementatie van XPath-query's op basis van domdocument moeten naamruimten worden gedeclareerd in het Document Object Model (DOM) voordat de selectNodes of selectSingleNode methoden worden uitgevoerd.

Stappen voor het reproduceren van het gedrag

  1. Maak in Visual Basic een nieuw Standard EXE-project. Form1 wordt standaard gemaakt.

  2. Plak de volgende code in de Form_Unload() gebeurtenis 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 in het menu Project op Verwijzingen. Selecteer Microsoft XML, v3.0 of hoger in de lijst met beschikbare verwijzingen.

  4. Voer het project uit. Er wordt geen XML geretourneerd.

  5. Commentarieer de twee setProperty methoden uit.

    Notitie

    U kunt de twee coderegels ook als volgt wijzigen.

    .setProperty "SelectionNamespaces", "xmlns:myNS='uri:MyNameSpace'"
    Set nodeList = .selectNodes("//myNS:Test")
    
  6. Voer het project uit. De XML-knooppunten worden geretourneerd.

Verwijzingen

Naamruimte opgeven bij het uitvoeren van query's op de DOM met XPath