Jak używać XPath do kwerendy na podstawie nazw domyślne zdefiniowane przez użytkownika


Objawy


Gdy ponownie zdefiniować domyślny obszar nazw w dokumencie XML, zmienić właściwości wewnętrznej SelectionNamespaces domyślny obszar nazw, a następnie spróbuj programowo za pomocą XPath zwraca węzły za pomocą metody selectNodes lub selectSingleNodes , węzły nie są zwracane.

Rozwiązanie


Albo za pomocą prefiksy obszarów nazw po określeniu właściwości SelectionNamespaces , lub użyć operacji dopasowywania wzorców Extensible Stylesheet Language (XSL) zamiast XPath.

Więcej informacji


To zachowanie jest zgodne z projektem.

Wykonywanie kwerend XPath DOMDocument wymaga, tym przestrzenie nazw być zadeklarowany w modelu obiektu dokumentu (DOM), przed wykonaniem metody selectNodes lub selectSingleNode .

Kroki do odtworzenia problemu

  1. W języku Visual Basic Utwórz nowy projekt Standard EXE. Domyślnie utworzony zostanie formularz Form1.
  2. Wklej następujący kod do zdarzenia Form_Unload() formularza 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. W menu Projekt kliknij polecenie odwołania. Wybierz z listy Dostępne odwołania Microsoft XML, w wersji 3.0 lub nowszej.
  4. Uruchom projekt. XML nie jest zwracany.
  5. Komentarz dwie metody setProperty . Uwaga: Możesz też można zmodyfikować dwa wiersze kodu w następujący sposób.
            .setProperty "SelectionNamespaces", "xmlns:myNS='uri:MyNameSpace'"        Set nodeList = .selectNodes("//myNS:Test")

  6. Uruchom projekt. Węzłów XML są zwracane.

ODWOŁANIA

Aby uzyskać więcej informacji, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:

Jak 294797 określić obszar nazw podczas wykonywania zapytań modelu DOM XPath