为什么*在与XPath节点函数一起使用时只返回第一个XML标记?

时间:2018-03-22 11:43:52

标签: xml xpath

我正在尝试在文档中获取 所有 项目的本地名称:

<document>
  <item_0001>Erstes Element</item_0001>
  <item_0002>Zweites Element</item_0002>
  <item_0003>Drittes Element</item_0003>
  <item_0004>Viertes Element</item_0004>
  <other_0001>Erstes Element</other_0001>
  <other_0002>Zweites Element</other_0002>
</document>

以下仅返回 第一个 项目的标记名称:

local-name(/document/*)

不应*让它返回 所有 项目吗?为什么不呢,我如何返回我想要的所有标签名称?

1 个答案:

答案 0 :(得分:1)

XPath表达式,

/document/*

会返回所有项目。在强调local-name()的调用之前, XPath 1.0 将结果节点集自动转换为第一个节点。 (如果您使用的是XPath 2.0,local-name(/document/*)会导致运行时错误。)

XPath 1.0 中,没有良好的XPath解决方案来实现您的结果。通常,您可以通过托管语言(XSLT,Python,Java等)将函数应用于生成的节点集。

XPath 2.0 中,您可以使用

/document/*/local-name()

(或只是/document/*/name(),因为无论如何都没有游戏中的命名空间)来实现你的结果:

item_0001
item_0002
item_0003
item_0004
other_0001
other_0002