首页 文章

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

提问于
浏览
2

问题: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 回答

  • 2

    XPath 1.0是一个过滤器;它无法生成内容 . 如果它不是DOM中的节点(元素节点,属性节点,文本节点等),则不能返回它 . 这意味着XPath查询无法返回字符串 .

    这就是 //*/local-name() 无法运作的原因 .

  • 0

    在XPath 1.0数据模型中,没有一组字符串,因此无法返回一组节点的名称集 .

    在XPath 2.0中它很简单:

    //*/local-name()
    
  • 0

    你可以调用 local-name 函数:

    //*[local-name()='nodename']
    

相关问题