什么时候必须将 XPath 属性设置为 XML DOM 对象?

2024-05-04

例如:

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

When objXML.setProperty "SelectionLanguage", "XPath"被注释,则第一个 xpath 表达式(x 对象)返回有效,但第二个 xpath 表达式(y 对象)引发错误:

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

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

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

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


对于旧版本的 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. 使用较新(不太旧?)的版本而不指定任何选择语言

From an 古文 http://msdn.microsoft.com/en-us/magazine/cc302348.aspx 这闻起来就像我十几岁的时候描述 XSL 模式和 XPath 之间的区别。

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

所以,我认为你有轻微的(!)例外。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

什么时候必须将 XPath 属性设置为 XML DOM 对象? 的相关文章

随机推荐