据我了解,所有XSLPattern查询都与XPath查询完全相同,但不一定相反。任何人都可以确认这一点,或者是否有人有一些链接到某些证实这一点的Microsoft文档?
我已经在我管理的一些代码的各个部分中将MSXML文档的选择语言更改为XPath,我只是想确保我不会破坏最初编写为XSLPattern查询的查询。 / p>
答案 0 :(得分:0)
根据我的理解,有些表达式作为XSLPattern
有效,并且可以selectNodes/selectSingleNode
执行,但在作为XPath 1.0
表达式执行时会抛出错误。例如
var doc = new ActiveXObject('Msxml2.DOMDocument.3.0');
doc.loadXML('<root><item>1</item><item>2</item></root>');
var item = doc.selectSingleNode('root/item[end()]');
WScript.Echo(item.xml);
doc.setProperty('SelectionLanguage', 'XPath');
item = doc.selectSingleNode('root/item[end()]');
使用XSLPattern
语言中定义的the end()
function,只要选择语言是XSLPattern,然后在最后一行引发异常,因为XPath中没有这样的函数1.0,你会把它写成root/item[position() = last()]
。
因此,有些XSLPattern表达式不能用作XPath 1.0表达式。还有一些表达式导致不同的结果,例如
var doc = new ActiveXObject('Msxml2.DOMDocument.3.0');
doc.loadXML('<root><item>1</item><item>2</item><item>12</item></root>');
var expression = 'root/item[. > "10"]';
var item = doc.selectSingleNode(expression);
WScript.Echo(item.xml);
doc.setProperty('SelectionLanguage', 'XPath');
item = doc.selectSingleNode(expression);
WScript.echo(item.xml);
输出
<item>2</item>
<item>12</item>
因为似乎XSLPattern使基于>
的字符串比比较大,而XPath 1.0仅支持数字比较并自动将参数转换为该类型。