Я пытаюсь получить тег "" из XML ниже.
Если я выполню запрос следующим образом:
WITH x(col) AS (select'<document xmlns="http://example.com/digital/back/" xmlns:ns2="http://example.com/digital/back/complexId" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=""> <header> <docId>13a2f29a28b12ecb</docId> <dt>2018-12-10T11:59:48.112+03:00</dt> </header> <pay> <reqTransfer id="154638"> <source> <card> <virtualCardNum>4B74C1EE187</virtualCardNum> <bsc>VISA</bsc> </card> </source> </reqTransfer> </pay> </document> '::xml) SELECT xpath('/document/pay/reqTransfer/source/card/bsc/text()', col) AS bsc FROM x;
, я получу {}, но если я переназначу документначальный тег
{}
<document xmlns="http://example.com/digital/back/" xmlns:ns2="http://example.com/digital/back/complexId" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="">
с <document> или даже <document xmlns="">, я получаю { VISA } - это правильно.
<document>
<document xmlns="">
{ VISA }
Что я должен сделать, чтобы заменить <document xmlns="..."> на <document> или получить { VISA } без замены?
<document xmlns="...">
Если вы работаете с пространствами имен XML, их также стоит упомянуть в запросах Xpath, т. Е. Используйте
SELECT xpath('/d:document/d:pay/d:reqTransfer/d:source/d:card/d:bsc/text()', col, ARRAY[ARRAY['d', 'http://example.com/digital/back/']]) AS bsc
http://sqlfiddle.com/#!17/9eecb/24719
См. Также: