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ı
Visual Basic'te yeni bir Standart EXE projesi oluşturun. Form1 varsayılan olarak oluşturulur.
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
Proje menüsünde Başvurular'a tıklayın. Kullanılabilir başvurular listesinden Microsoft XML, v3.0 veya üzerini seçin.
Projeyi çalıştırın. XML döndürülmedi.
İ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")
Projeyi çalıştırın. XML düğümleri döndürülür.