CaB*_*ach 4 xml xpath vba domdocument
嗨,在VBA我有以下表达式:
SourceXml.selectNodes("//Races/Race[/FirstRun[@ActStart>'2011-03-01' or
@ActEnd<'2011-03-15']]")
Run Code Online (Sandbox Code Playgroud)
如果我将SourceXml定义为MSXML2.DOMDocument,它将检索包含所需节点的列表.如果我将SourceXml定义为MSXML2.DOMDocument60,它将检索一个包含0个元素的列表.
Xpath表达式出了什么问题?
您提供的表达式:
//Races/Race[/FirstRun[@ActStart>'2011-03-01' or ActEnd<'2011-03-15']]
Run Code Online (Sandbox Code Playgroud)
将不选择任何节点,因为在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
]
]
Run Code Online (Sandbox Code Playgroud)