这个问题在这里已经有了答案:




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/

10-10 22:14