【发布时间】:2016-11-21 05:32:22
【问题描述】:
我需要从包含完整 XML 文档的 XMLType 变量中提取 PLSQL 过程中的数据,具有以下结构(以下简化):
<?xml version="1.0" encoding="utf-8"?>
<AA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://my.domain/cat1/">
<Element>
<ID>2</ID>
<Value>46544</Value>
<Element>
</AA>
我正在使用 XMLTable 函数,但使用简单的 /AA/Element XPath 表达式没有数据:
SELECT C1, C2
INTO v_id, v_val
FROM XMLTable('/AA/Element'
passing v_MyXML columns
C1 number path 'ID',
C2 number path 'Value'
)
以下任何一个都不是:
'/*.AA/Element'
'declare default element namespace "http://my.domain/cat1/"; /AA/Element'
'declare namespace xsi="http://www.w3.org/2001/XMLSchema-instance"; declare namespace xsd="http://www.w3.org/2001/XMLSchema"; declare default element namespace "http://jpk.mf.gov.pl/wzor/2016/03/09/03094/"; /AA/Element'
我能够提取数据的唯一方法是修改文档/变量并简单地替换
<AA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://my.domain/cat1/">
与
<AA>
这不是完美的解决方案,因为我需要修改文档并返回具有适当属性的初始结构。 有人可以建议如何修改 XPath 表达式以获取数据吗? 或者也许使用任何其他方法忽略来自 AA 元素的命名空间?
【问题讨论】:
-
一个快速而肮脏的解决方案是将您的 XPath 表达式更改为
/*/*[local-name() = 'Element']。最好弄清楚如何正确引用命名空间。
标签: xml xpath plsql namespaces xquery