XPath не предоставляет правильный тег - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь получить тег "" из 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 xmlns="..."> на <document> или получить { VISA } без замены?

1 Ответ

0 голосов
/ 25 декабря 2018

Если вы работаете с пространствами имен 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

См. Также:

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