【问题标题】:Postgres XML parse nodenamePostgres XML 解析节点名
【发布时间】:2020-08-01 00:29:44
【问题描述】:

我有一些这样的 XML:

<title>A Closer Look</title>
<pubDate>Thu, 12 Sep 2019 17:46:49 +0000</pubDate>
<language>en</language>
<copyright><![CDATA[]]></copyright>
<category:keywords>business,businessnews</category:keywords>

我正在使用这个查询来解析 XML:

SELECT (xpath('//channel/title/text()', x))[1]::varchar AS Title,
       (xpath('//channel/pubDate/text()', x))[1]::varchar AS PublishDate,
       (xpath('//channel/language/text()', x))[1]::varchar AS Language,
       (xpath('//channel/copyright/text()', x))[1]::varchar AS Copyright,
       (xpath('//channel/category:keywords']/text()', x))[1]::varchar AS CategoryKeywords
FROM unnest(xpath('//channel', pg_read_file('test.xml')::xml)) x;

但是,我在冒号上收到了这个错误:

ERROR:  could not create XPath object
DETAIL:  Undefined namespace prefix

如何执行此查询,包括带有冒号的节点名称

谢谢!

【问题讨论】:

    标签: xml postgresql parsing nodename


    【解决方案1】:

    您需要“类别”的命名空间声明。尝试将其放在 XML 的根元素中:

    <root xmlns:category="tempuri.org">
    

    -您尚未包含整个 XML,因此我将元素称为“根”-但您不需要更改它。

    【讨论】:

    • 没有别的办法了吗?我问只是因为,我们从外部客户端获取这个 XML 文件,所以我们必须使用他们给我们的任何东西。
    • 你能不能先测试一下这是否修复了它,然后想办法实现它?
    猜你喜欢
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    相关资源
    最近更新 更多