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