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

PySpark XPath提取XML指定属性子节点值失败求助

问题解决方法

你的XPath提取失败主要有4个问题,对应修正后的代码如下:

错误原因

  • 未处理XML命名空间:所有节点带ns1:前缀,XPath必须匹配或忽略该前缀
  • 属性值未加引号:XPath中字符串类型的属性值必须用引号包裹
  • 目标ID写错:你要提取id=9616的节点,但代码里写的是9611
  • 根节点路径错误:XML根节点是ns1:visitors,不是visitors

修正方案1:忽略命名空间(无需知道命名空间URI)

使用local-name()匹配节点名称,避开前缀影响:

df = df.selectExpr(
    "xpath_string(visitors, '/*[local-name()=\"visitors\"]/*[local-name()=\"visit\" and @name=\"loy\"]/*[local-name()=\"visitor\" and @id=\"9616\"]') as result"
)

这里用xpath_string直接返回单个字符串结果,而不是数组。

修正方案2:指定命名空间映射(如果知道命名空间URI)

如果XML的ns1有对应的URI(比如XML头部声明了xmlns:ns1="http://xxx.com"),可以直接在XPath中使用前缀,并通过第三个参数传入命名空间映射:

df = df.selectExpr(
    "xpath_string(visitors, '/ns1:visitors/ns1:visit[@name=\"loy\"]/ns1:visitor[@id=\"9616\"]', map('ns1', 'http://your-namespace-uri')) as result"
)

两种方案运行后,都会返回目标值Dr George。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 03:03:31