我的选择有问题。我想要获取的值的标记有一个命名空间,稍后,命名空间可以不同,所以我不能硬编码它。
到目前为止,'//*[local-name()='语法是有效的,除非标签有一个我想从中获取值的名称空间。
现在返回的值为null。
select
test.test_customer_id,
test.test_customer_id_2
from (
select column_value
from XMLTABLE(q'~//*[local-name()='ResponseData']~'
PASSING
(select xmltype('<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<V2 xmlns:ns27="http://testnamespace">
<ResponseData>
<CustomerData>
<ns27:TestCustomerId>27295343</ns27:TestCustomerId>
<ns27:TestCustomerId2>27295343</ns27:TestCustomerId2>
</CustomerData>
</ResponseData>
</V2>
</S:Body>
</S:Envelope>'
)
from dual))) dlcp,
XMLTABLE('//CustomerData' PASSING dlcp.column_value COLUMNS
test_customer_id VARCHAR2(100) PATH 'TestCustomerId',
test_customer_id_2 VARCHAR2(100) PATH 'TestCustomerId2') test;
我可以在不声明和硬编码ns 27命名空间的情况下修复这个问题吗?
1条答案
按热度按时间eqzww0vc1#
如果你真的不知道命名空间,那么你可以用
*
来通配符命名空间:您还可以简化为单个XMLTable调用:
或:
fiddle