例如:
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属性,或者在没有设置此属性的情况下执行哪种表达式?
答案 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。
来自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规范中有一些小的例外。
所以,我认为你处于次要(!)例外。