获取具有 xml 结构的 Oracle CLOB 的 xml 属性对

Getting xml attribute pair of Oracle CLOB with xml structure

我有一个 xml 具有以下结构:

<xml>
    <ele1>
        <ele2>
            <Attribute Key="x1" Value="V1" />
            <Attribute Key="x2" Value="V2" />
            <Attribute Key="x3" Value="V3" />
            <Attribute Key="x4" Value="V4" />
            <Attribute Key="x5" Value="V5" />
        </ele2>
    </ele1>
</xml>

对于每个 Key=x1 和 Key=x3,我想获取值。

目标 table/select 应该有以下列: ele2 | x1 | x2

实际我有以下代码:

SELECT Description.*, Other.*
FROM   (select XMLTYPE.createXML(XMLCODE) as XMLCODE from Table) myxml,
       XMLTABLE('/ele1/ele2/Attribute[@Key="x1"]'
         PASSING myxml.XMLCODE
         COLUMNS 
           "Description"    VARCHAR2(255)  PATH '@Value'
         ) Description,
        XMLTABLE('/ele1/ele2/Attribute[@Key="x2"]'
         PASSING myxml.XMLCODE
         COLUMNS 
           "Other"    VARCHAR2(255)  PATH '@Value'
         ) Other;

问题是 XMLTables 没有连接,我得到了一个笛卡尔积。有什么想法或有更简单的方法吗?

这里不需要多次 XMLTable 调用;您可以通过在 columns 子句中提供多列(复数 - 有点线索)来从同一个节点中提取多个值。

select x.*
from myTable t
cross join XMLTable('/xml/ele1/ele2'
  passing xmltype(t.xmlcode)
  columns description varchar2(255) path 'Attribute[@Key="x1"]/@Value',
    other varchar2(255) path 'Attribute[@Key="x2"]/@Value'
) x;

两个属性值都来自同一个 ele2 节点。