Получить значение и индекс атрибута массива данных xmlns с помощью запроса postgresql - PullRequest
0 голосов
/ 04 января 2019
<sample-test-data-history xmlns="dmotorworks.com/sample-test-data-history"> <payPaymentCode> 
<V Idx="1">CASH</V>
 </payPaymentCode>
 <StatusCode>C98</StatusCode> 
<Type> 
<V Idx="1">Cat</V> 
<V Idx="2">Mouse</V> 
<V Idx="3">Tree</V> 
</Type> 
<totMiscCost> 
<V Idx="1">100.00</V> 
<V Idx="2">150.00</V> 
<V Idx="3">200.00</V> 
</totMiscCost> 
</sample-test-data-history> 

Из этого xmlns мне нужно получить значение idx массива, для которого текст «cat», и на основе этого значения Idx мне нужно получить totMiscCost из следующего атрибута массива с таким же значением Idx

1 Ответ

0 голосов
/ 04 января 2019

Вы можете использовать xpath(), чтобы использовать выражение XPath, извлекающее части XML. Он вернет массив совпадений, поэтому вам нужно выбрать нужный индекс, если вы хотите скаляр.

В последнем необязательном аргументе xpath() может быть указан массив массивов элементов, каждый из которых определяет отображение пространства имен.

В вашем случае выражение XPath получает текст totMiscCost/V, где значение атрибута Idx равно значению атрибута с тем же именем Type/V. Обратите внимание, что вы должны поставить перед элементами псевдоним пространства имен.

SELECT (xpath('(//dns:totMiscCost/dns:V[@Idx=//dns:Type/dns:V[text()="Cat"]/@Idx]/text())[1]',
              nmuloc,
              ARRAY[ARRAY['dns',
                      'dmotorworks.com/sample-test-data-history']]))[1]
       FROM elbat;

дб <> скрипка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...