何时必须将XPath属性设置为XML DOM对象?

时间:2012-07-13 00:26:00

标签: xpath vbscript msxml

例如:

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 object)返回有效但第二个xpath表达式(y object)引发错误:

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

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

如果我取消注释objXML.setProperty "SelectionLanguage", "XPath"两个表达式都有效。

我的问题是什么时候必须显式设置XPath属性,或者在没有设置此属性的情况下执行哪种表达式?

1 个答案:

答案 0 :(得分: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. 使用较新的(较旧的?)版本而不指定任何选择语言
  3. 来自ancient article ,闻起来像我十几岁的时候描述了XSL模式和XPath之间的区别。

      

    MSXML 2.0支持 XSL模式 XPath 的前身   1.0。 XML寻址语言的概念被引入到原始的W3C XSL工作草案中   (http://www.w3.org/TR/1998/WD-xsl-19981216.html)并称为XSL   模式。 MSXML 2.0实现了所描述的XSL Patterns语言   在原始的XSL规范中有一些小的例外

    所以,我认为你处于次要(!)例外。