c++ - XPATH与XSLPattern向后兼容

标签 c++ xml xpath msxml

据我了解,所有XSLPattern查询都将与XPath查询相同地工作,但不一定相反。任何人都可以确认这一点,或者有人可以链接到某些Microsoft文档来确认这一点吗?

在我管理的某些代码的各个部分中,我已经将MSXML文档的选择语言更改为XPath,我只想确保我不会破坏最初作为XSLPattern查询编写的查询。

最佳答案

在我的理解中,有些表达式可以作为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()]');

使用end()语言中定义的the XSLPattern 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仅支持数字比较并自动将参数转换为该类型。

关于c++ - XPATH与XSLPattern向后兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26847922/

相关文章:

c++ - 一个函数使用多少内存?

c++ - 如何在数的质因数分解中找到质因数的重数?

java - Android 自定义 map fragment 属性

python - ElementTree,Python - 查找子元素包含特定文本的元素并将另一个子元素添加到列表中

xslt - 如何连接两个节点集以遵守顺序?

c++ - 让单元测试成为它正在测试的类的 friend 有什么问题?

c++ - OpenGL/Carbon/Cocoa 内存管理自动释放问题

android - 每个 ImageView 都需要 CardView 吗?

java - Selenium CSS 选择器语法用于检查类和文本

php - 无法通过xpath()(YT channel 供稿)访问XML节点