2015-03-30 49 views
2

以下代碼對XML 1可以正常工作,但不會讀取來自XML 2的行(已添加ROOT)。你知道爲什麼嗎?帶有不在VBScript中的根的XML節點

Set xmlDoc = CreateObject("Msxml2.DOMDocument") 
xmlDoc.async="false" 
xmlDoc.setProperty "SelectionLanguage", "XPath" 
xmlDoc.load("test.xml") 

set nodes=xmlDoc.SelectNodes("//customer") 
for i=0 to nodes.length-1 
set node = nodes(i) 
set company = node.selectSingleNode("company") 
msgbox company 
next 

XML 1:

<?xml version="1.0" encoding="UTF-8"?> 
<customers> 
    <customer> 
     <name>ABCars</firma> 
    </customer> 
</customers> 

XML 2:

<?xml version="1.0" encoding="UTF-8"?> 
<ROOT xmlns="http://www.something.com "> 
    <customers> 
     <customer> 
      <name>ABCars</firma> 
     </customer> 
    </customers> 
</ROOT> 

回答

2

這是因爲你的第二個文件有一個默認的命名空間。 XPath與默認的命名空間很時髦。你需要或者需要添加一個命名空間前綴(如xmlns:ns0="http://www.something.com",然後使用該前綴(ns0:ROOTns0:customers等),或重構你的XPath使用local-name()功能:

set nodes=xmlDoc.SelectNodes("//*[local-name()='customer']") 

你也必須改變您的selectSingleNode:!

set company = node.selectsingleNode("*[local-name()='company']") 

如果你搜索這個網站的「XPath的默認名稱空間」,你會發現很多相關的問題

+0

非常感謝還有一兩件事 - 如果我使用的語法:節點集= xmlDoc.SelectNodes(「// * [ local-name(。)='customer']「)如何獲得客戶名稱值? set company = node.selectSingleNode(「name」)似乎不再工作。 – 2015-03-31 08:25:52

+0

我已經更新了答案。如果這回答您的問題,請考慮通過點擊它下面的複選框將其標記爲已接受。 – 2015-03-31 12:31:58