如何从XML数据中提取name节点的纯文本值(PostgreSQL)
PostgreSQL提取XML节点纯文本值(去除标签)
你当前的查询返回的是包含<name>标签的XML节点对象,要获取节点内部的纯文本值,有两种简单的调整方式:
方法1:修改XPath表达式直接提取文本节点
在XPath路径末尾加上/text(),直接定位到name节点的文本子节点,返回结果就是纯文本内容:
with cte as ( select '<Root> <row id="1"><name>Sam</name><address>dummy address</address></row> <row id="2"><name>Mak</name></row> <row id="3" /> </Root>'::xml as xm ) select unnest(xpath('//Root/row/name/text()', xm)) as name from cte;
方法2:用xmltext()函数转换XML节点
如果不想修改XPath,可以用PostgreSQL的xmltext()函数,把提取到的XML节点直接转换为纯文本:
with cte as ( select '<Root> <row id="1"><name>Sam</name><address>dummy address</address></row> <row id="2"><name>Mak</name></row> <row id="3" /> </Root>'::xml as xm ) select xmltext(unnest(xpath('//Root/row/name', xm))) as name from cte;
两种方法都会得到预期输出:
name ------ Sam Mak
内容的提问来源于stack exchange,提问作者MAK
相关产品推荐
相关产品推荐

