问题:XPath 1.0表达式是否只返回xml节点的名称(合格与否)而不是整个节点? XPath 2.0是否具备相同的功能?
细节:
我正在分析一系列格式良好的xml文档,用于xml元素节点的使用(即获取跨多个xml文档的xml节点的聚合计数) . 我有一个perl脚本,它检索每个文档的所需节点集,然后遍历每个节点以使用XML :: XPath :: Node :: Element-> getName获取节点名称的计数 . 我有一个替代实现,配置xml节点属性和文本值,但使用XPath语句来检索“原子值”(而不是在perl中使用XML :: XPath :: Node :: Element-> getAttribute()或类似的) .
[注意,我意识到“原子值”实际上是属性/文本节点的集合 .
当允许XPath表达式返回所需的"atomic values"而不是在perl中循环结果时,我的性能提高了50倍,所以我想以类似于属性的方式检索xml节点名称(即'attribute :: ' or ' @ ')and text (ie ' text()') nodes. I' ve查看了XPath和XML规范,但未能确定解决方案 .
编辑:更具体地说,我正在寻找像 'local-name(//*)'
这样的东西,但是会为所有匹配节点返回一组名称(而不是仅找到第一个节点) .
3 回答
XPath 1.0是一个过滤器;它无法生成内容 . 如果它不是DOM中的节点(元素节点,属性节点,文本节点等),则不能返回它 . 这意味着XPath查询无法返回字符串 .
这就是
//*/local-name()
无法运作的原因 .在XPath 1.0数据模型中,没有一组字符串,因此无法返回一组节点的名称集 .
在XPath 2.0中它很简单:
你可以调用
local-name
函数: