Postgres XML синтаксический анализ имени узла - PullRequest
0 голосов
/ 01 августа 2020

У меня есть 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

Как я могу выполнить этот запрос, включая имя узла с двоеточием

Спасибо!

1 Ответ

0 голосов
/ 01 августа 2020

Вам нужно объявление пространства имен для «категории». Попробуйте поместить это в элемент root вашего XML:

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

- вы не включили весь свой XML, поэтому я назвал элемент 'root' - но вы не 'нужно это изменить.

...