可能重复:
String greater, less, and equal comparison in XmlDocument
您好, 在VBA中,我有以下表达式:
SourceXml.selectNodes("//Races/Race[/FirstRun[@ActStart>'2011-03-01' or
@ActEnd<'2011-03-15']]")
如果我将SourceXml定义为MSXML2.DOMDocument,它将检索包含所需节点的列表。 如果我将SourceXml定义为MSXML2.DOMDocument60,它将检索一个包含0个元素的列表。
Xpath表达式出了什么问题?
答案 0 :(得分:5)
您提供的表达:
//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
]
]