2012-07-13 43 views
3

例如:何時必須將XPath屬性設置爲XML DOM對象?

Set objXML = CreateObject("Microsoft.XMLDOM") 

objXML.async = False 
objXML.validateOnParse = False 
objXML.resolveExternals = False 
objXML.load("http://www.w3schools.com/dom/books.xml") 

'objXML.setProperty "SelectionLanguage", "XPath" 

For Each x In objXML.selectNodes("//book[@category='cooking' and @category='children']") 
    WScript.Echo x.text 
Next 

For Each y In objXML.selectNodes("//book[position()<3]") 
    WScript.Echo y.text 
Next 

objXML.setProperty "SelectionLanguage", "XPath"被註釋然後第一xpath表達式(x對象)被返回有效但第二xpath表達式(Y對象)引發錯誤:

msxml3.dll (14, 1) : Unknown method. 

//book[-->position()<--<3] 

如果我去掉objXML.setProperty "SelectionLanguage", "XPath"既表達式工作。

我的問題是什麼時候必須明確設置XPath屬性,或者什麼樣的表達式在沒有設置此屬性的情況下執行?

回答

4

對於舊版本的MSXML,默認語言不是XPath。
您已經使用舊版「獨立於版本的ProgID」創建了DomDocument實例。 Microsoft.XMLDOM對應MSXML 3.0(如果有)作爲支持獨立ProgID的MSXML的最後一個版本。
您可以確定默認的選擇語言是這樣的:

WScript.Echo objXML.getProperty("SelectionLanguage") 

必須返回XSLPattern其選擇的語言不支持像position()方法。
XPath是MSXML 4.0及更高版本的默認選擇語言,因此您有兩個選擇正確使用XPath。

  1. 使用指定選擇語言爲XPath的舊版本。
  2. 使用較新的(少老的?)版本,沒有任何specifyng選擇語言

ancient article那聞起來像我的描述XSL模式和XPath之間的區別少女時代

MSXML 2.0 provides support for XSL Patterns, the precursor to XPath 1.0. The notion of an XML addressing language was introduced into the original W3C XSL Working Drafts (http://www.w3.org/TR/1998/WD-xsl-19981216.html) and called XSL Patterns. MSXML 2.0 implements the XSL Patterns language as described in the original XSL specification with a few minor exceptions.

所以,我認爲你是在輕微(!)例外。

+0

優秀的答案!謝謝:) 我從來沒有聽說過「XSL模式」表達式。所以至少設置'CreateObject(「MSXML2.DOMDocument.4.0」)'確保XPath在所有榮耀 – theta 2012-07-13 02:04:35

+0

不客氣。其實你應該使用6.0由於兩件事情。 1 - MSXML4只有32位,會造成麻煩。 2 - MSXML6最近有了對原生64位支持的改進。 – 2012-07-13 02:27:39

+0

好的,謝謝你的提示;) – theta 2012-07-13 02:39:09

相關問題