【问题标题】:Extracting XML element value from Postgres从 Postgres 中提取 XML 元素值
【发布时间】:2012-12-28 13:35:02
【问题描述】:

给定:

CREATE TABLE xmltest(xtxt xml);

还有:

INSERT INTO xmltest values ('<EMP><NAME>Mike</NAME><HIREDATE>12-FEB-96</HIREDATE></EMP><EMP><NAME>Bob</NAME><HIREDATE>13-AUG-97</HIREDATE></EMP><EMP><NAME>Paul</NAME><HIREDATE>17-JUN-94</HIREDATE></EMP><EMP><NAME>Jim</NAME><HIREDATE>01-JUN-94</HIREDATE></EMP>');

使用 Postgres 9.2 的基本功能,我将如何编写只返回员工姓名、结果集中每行 1 个姓名的 SELECT 语句?还是我必须在 PL/PGSQL 中编写一个函数才能做到这一点?

【问题讨论】:

    标签: postgresql xpath xml-parsing xquery plpgsql


    【解决方案1】:

    您可以使用xpath 函数将感兴趣的字段提取到一个数组中,然后您可以使用unnest 内置函数将该数组拆分为多行:

    SELECT unnest(xpath('//name', xtxt))
    FROM   xmltest;
    

    (借用this question

    【讨论】:

    • 谢谢,快到了。我在一行中有多名员工,正如所写的那样,这在第一个员工之后是“文件末尾的额外内容”。所以我必须努力。话虽如此,您的代码在演示中比文档中的演示更清晰 postgresql.org/docs/9.1/interactive/… ..还按照您回复中的链接指向有用的博客文章 scottrbailey.wordpress.com/2009/06/19/xml-parsing-postgres
    • 这可能是因为您的原始 XML 无效,没有单个根节点。您有多个 对象,但没有包装它们,这可能是导致问题的原因。
    猜你喜欢
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多