XPath 1.0能否以类似于返回节点属性和文本的方式返回XML元素名称?

时间:2012-01-31 18:40:54

标签: xml perl xpath

问题:         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(//*)'的东西,但是会为所有匹配节点返回一组名称(而不是仅找到第一个节点)。

3 个答案:

答案 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()无法工作的原因。