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
相关产品推荐
相关产品推荐

