这个问题在这里已经有了答案:
10年前关闭。
你好,
在 VBA 中,我有以下表达式:
SourceXml.selectNodes("//Races/Race[/FirstRun[@ActStart>'2011-03-01' or
@ActEnd<'2011-03-15']]")
如果我将 SourceXml 定义为 MSXML2.DOMDocument,它将检索包含所需节点的列表。
如果我将 SourceXml 定义为 MSXML2.DOMDocument60,它将检索一个包含 0 个元素的列表。
Xpath 表达式有什么问题?
最佳答案
您提供的表达式 :
//Races/Race[/FirstRun[@ActStart>'2011-03-01' or ActEnd<'2011-03-15']]
不会选择任何节点 ,因为在 XPath 1.0 中没有用于字符串的
>
或 <
比较运算符(仅用于数字)。上面的两个字符串首先转换为数字,这会产生 NaN
并且任何涉及 NaN
的比较都是 false()
。因此,谓词的值为 false()
并且表达式不选择任何节点。使用
MSXML2.DOMDocument.SelectNodes()
选择节点的事实是因为在这个早期版本的 MSXML 中,默认选择语言不是 XPath ,而是一种叫做“XSL”的东西(如果我没记错的话),它不是标准的 W3C XPath 语言。我猜 MSXML6 不再提供这种过时的方言。
在您的情况下,您可能能够成功使用此 XPath 表达式 :
//Races/Race[/FirstRun
[translate(@ActStart,'-','') > 20110301
or
translate(ActEnd, '-','') < 20110315
]
]
关于xml - Xpath 适用于 "MSXML2.DOMDocument"但不适用于 "MSXML2.DOMDocument60",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4865476/