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

PostgreSQL中如何使用XPath获取XML多个子元素的名称

问题原因

你之前的两种写法都不符合PostgreSQL对XPath函数的调用逻辑:

  • 第一种写法中,xpath('name()', 节点)没有指定上下文节点,无法正确识别要取名称的目标,所以返回空结果。
  • 第二种写法中,XPath的name()函数传入节点集时,默认只会处理节点集的第一个元素,因此只能拿到第一个子节点bar的名称。

正确实现方式

方法1:兼容所有版本PostgreSQL的写法

先拆分/foo下的所有子节点,再对每个节点单独取名称:

SELECT (xpath('name(.)', node))[1]::text AS tag_name
FROM unnest(xpath('/foo/*', '<foo><bar>test</bar><zar>test1</zar></foo>')) AS node;

执行后会返回两行结果,分别为bar、zar。

方法2:PostgreSQL 10+ 更简洁的XMLTABLE写法

SELECT tag_name
FROM XMLTABLE(
    '/foo/*'
    PASSING '<foo><bar>test</bar><zar>test1</zar></foo>'
    COLUMNS tag_name text PATH 'name()'
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:15:04