Kullanıcı tanımlı varsayılan ad alanında sorgulamak için XPath kullanma

Bu makalede, kullanıcı tanımlı varsayılan ad alanına karşı sorgulamak için XPath'in nasıl kullanılacağı açıklanır ve davranışı yeniden oluşturmak için kod sağlanır.

Orijinal ürün sürümü: Visual Basic
Özgün KB numarası: 288147

Belirtiler

XML belgesinde varsayılan ad alanını yeniden tanımladığınızda, varsayılan ad alanının iç SelectionNamespaces özelliğini değiştirip veya selectSingleNodes yöntemini kullanarak selectNodes düğüm döndürmek için XPath'i program aracılığıyla kullanmayı denediğinizde, hiçbir düğüm döndürülmez.

Çözüm

Özelliği belirtirken SelectionNamespaces ad alanlarıyla ön ekleri kullanın veya XPath yerine Genişletilebilir Stil Sayfası Dili (XSL) desen eşleştirme işlemlerini kullanın.

Daha fazla bilgi

Bu davranış tasarımdan kaynaklanır.

DOMDocument'a karşı XPath sorgularının uygulanması, veya selectSingleNode yöntemleri çalıştırılmadan önce selectNodes ad alanlarının Belge Nesne Modeli'nde (DOM) bildirilmesi gerekir.

Davranışı yeniden oluşturma adımları

  1. Visual Basic'te yeni bir Standart EXE projesi oluşturun. Form1 varsayılan olarak oluşturulur.

  2. Aşağıdaki kodu Form_Unload() Form1 olayına yapıştırın.

    ' 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. Proje menüsünde Başvurular'a tıklayın. Kullanılabilir başvurular listesinden Microsoft XML, v3.0 veya üzerini seçin.

  4. Projeyi çalıştırın. XML döndürülmedi.

  5. İki setProperty yöntemi açıklama satırı satırına ekleyin.

    Not

    Alternatif olarak, iki kod satırını aşağıdaki gibi değiştirebilirsiniz.

    .setProperty "SelectionNamespaces", "xmlns:myNS='uri:MyNameSpace'"
    Set nodeList = .selectNodes("//myNS:Test")
    
  6. Projeyi çalıştırın. XML düğümleri döndürülür.

Başvurular

DOM'yi XPath ile Sorgularken Ad Alanı Belirtme