You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何XPath的local-name函数配合/*仅返回首个XML子元素的本地名称?

问题原因及解决方案

嘿,这个问题我之前也踩过坑!其实核心原因是XPath版本的差异在作怪~

为什么只返回第一个子元素的名称?

在XPath 1.0中,local-name()函数有个特性:如果传入的参数是一个节点集,它只会返回该节点集里第一个节点的本地名称。你的表达式/document/*确实选中了<document>下的所有子元素,但XPath 1.0的local-name()只会处理第一个匹配的节点,所以你只得到了item_0001。

怎么获取所有子元素的本地名称?

根据你使用的XPath版本,有两种解决方式:

1. 使用XPath 2.0及以上版本

如果你的环境支持XPath 2.0+(比如XQuery、Saxon处理器、现代编程语言中的XPath库等),直接用local-name(/document/*)就可以返回所有子元素的本地名称序列,结果会是:
item_0001, item_0002, item_0003, item_0004, other_0001, other_0002

2. 局限在XPath 1.0环境

如果只能用XPath 1.0,就得通过迭代节点集来逐个获取名称:

  • 比如在XSLT 1.0中,可以用循环遍历每个子元素:
<xsl:template match="/">
  <xsl:for-each select="/document/*">
    <xsl:value-of select="local-name(.)"/>
    <xsl:text> </xsl:text> <!-- 加个空格分隔结果 -->
  </xsl:for-each>
</xsl:template>
  • 如果是在其他支持XPath 1.0的工具中,也可以遍历/document/*返回的节点列表,对每个节点单独调用local-name(.)来获取名称。

内容的提问来源于stack exchange,提问作者David J.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:20:43