2016-01-29 6 views
2

Я пытаюсь извлечь значения из XML так же, как @Erwin Brandstetter ответил несколько раз на принятый ответ, но он просто не работает для я:Postgresql: использование xpath для извлечения данных из XML-столбца

Согласно this post и this post это должно работать, но я просто получить пустой результат:

WITH x AS (SELECT 
    '<Attributes xmlns="http://www.gis34.dk"> 
     <bemaerkning displayName="Bemærkning">Beatrix</bemaerkning> 
     <billede displayName="Billede">https://vignette.wikia.nocookie.net/killbill/images/3/39/The_Bride.jpg</billede> 
    </Attributes>'::xml AS t 
) 

SELECT xpath('/Attributes/bemaerkning/text()', t) as comment 
FROM x 

результат: (ожидается: {Мой комментарий})

comment 
xml[] 
------- 
{} 

Моя версия базы данных:

PostgreSQL 9.1.3 on x86_64-unknown-linux-gnu, compiled by gcc-4.5.real (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2, 64-bit 

Каждый имеет идея?

+0

проверить это один : http://stackoverflow.com/questions/17799790/using-xpath-to-extract-data-from-an-xml-column-in-postgres – har07

+0

@ har07, эта ссылка была одной из двух ссылок в моем вопросе. .. :-) – Ambran

ответ

1

Ваш XML определяет пространство имен, и это пространство имен должно использоваться в выражении xpath.

SELECT xpath('/g:Attributes/g:bemaerkning/text()', t, array[array['g','http://www.gis34.dk']]) as comment 
FROM x 

Обратите внимание на третий параметр, который passes a two-dimensional array of namespace mappings.

Функция xpath() возвращает массив элементов. Если вы знаете, что вы получите только один элемент (или только когда-либо хотите первый) просто возвращает первый элемент массива:

SELECT (xpath('/g:Attributes/g:bemaerkning/text()', t, array[array['g','http://www.gis34.dk']])[1] as comment 
FROM x 

Примечание скобки вокруг вызова функции: (xpath(...))

+0

Это здорово. Еще одна вещь: можно ли получить текст без фигурных скобок, окружающих их? – Ambran

+1

@Ambran: 'xpath()' возвращает массив, просто используйте первый элемент. See my edit –

+0

Еще раз спасибо :-) – Ambran

Смежные вопросы