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

Hive XPath如何提取XML中指定类型元素的数组?

如何用XPath提取XML中指定元素的文本数组?

嘿,我来帮你解决这个XPath的问题!首先看你给出的XML结构:

<d><a><c>1</c><b>2</b><b>3</b></a></d>

你想要提取<b>元素的文本数组[2,3],但之前的尝试遇到了两个问题:

  • 用//*[local-name()='a']/*/text()得到了[1,2,3],这是因为*匹配了<a>下的所有子元素(包括<c>和<b>),所以把所有文本都包含进来了
  • 用//*[local-name()='a']/b返回空数组,这大概率是命名空间在搞鬼

正确的XPath写法

如果你的XML带有默认命名空间(比如根元素隐含了xmlns属性),或者你必须用local-name()来规避命名空间问题,那么正确的表达式应该是:

//*[local-name()='a']/*[local-name()='b']/text()

如果你的XML没有任何命名空间(就是你给出的纯结构),那可以更简洁:

//a/b/text()

为什么之前的//*[local-name()='a']/b失效?

如果XML里存在默认命名空间(比如<d xmlns="http://some-namespace.com">),但你在XPath里没有绑定对应的前缀,直接写b会被解析成无命名空间的元素,而XML中的<b>其实属于默认命名空间,所以匹配不到。用*[local-name()='b']就能只匹配本地名称为b的元素,完美避开命名空间的干扰。

用上面的正确表达式测试,就能得到你想要的[2,3]数组啦!


内容的提问来源于stack exchange,提问作者gjin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:28:30