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

PostgreSQL 12中如何使用XMLTABLE遍历注释并解析XML节点

PostgreSQL 12 实现注释关联XML节点解析方案

核心思路

利用XPath的following-sibling轴定位注释节点后续的业务节点,直接通过XMLTABLE映射为目标三列结果,无需额外自定义函数。

实现代码

测试用例(可直接执行验证)

WITH sample_xml(xml_content) AS (
    VALUES (
'<?xml version="1.0" encoding="UTF-8"?>
<root>
<!-- ABSP65v9 -->
<table id="absp_table">
    <row><col>ABSP业务行1</col><col>ABSP业务行2</col></row>
</table>
<list id="absp_list">
    <item>ABSP列表项1</item><item>ABSP列表项2</item>
</list>
<!-- KYCG138v9 -->
<table id="kycg_table">
    <row><col>KYCG业务行1</col><col>KYCG业务行2</col></row>
</table>
<list id="kycg_list">
    <item>KYCG列表项1</item><item>KYCG列表项2</item>
</list>
</root>'::xml
    )
)
SELECT 
    t.comment_text,
    t.table_xml,
    t.list_xml
FROM sample_xml s,
XMLTABLE(
    -- 匹配指定内容的注释节点,normalize-space自动处理注释前后的空白字符
    '//comment()[normalize-space(.) = ("ABSP65v9", "KYCG138v9")]'
    PASSING s.xml_content
    COLUMNS
        -- 第一列:格式化后的注释文本
        comment_text text PATH 'normalize-space(.)',
        -- 第二列:当前注释后第一个table节点的完整XML
        table_xml xml PATH 'following-sibling::table[1]',
        -- 第三列:当前注释后第一个list节点的完整XML
        list_xml xml PATH 'following-sibling::list[1]'
) t;

代码说明

  • 注释匹配逻辑使用normalize-space(.)可以自动过滤注释文本前后的空格、换行符,避免因为XML格式化导致的匹配失败问题。
  • following-sibling::table[1] 会自动定位当前注释节点之后第一个出现的节点,不受两个节点之间其他无关节点的影响,兼容性更强。
  • 如果你的XML存储在业务表中,直接替换掉WITH子句的sample_xml为你自己的业务表和XML字段即可。

  • 内容的提问来源于stack exchange,提问作者Priya Sooraj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:45:05