XPath没有提供适当的标签

时间:2018-12-25 11:03:48

标签: sql xml postgresql

我正在尝试从下面的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 :(得分:0)

如果您使用的是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

另请参阅: