获取XML属性对甲骨文CLOB与XML结构
问题描述:
我有以下结构的一个xml:获取XML属性对甲骨文CLOB与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>
每个键= x1和重点=×3,我想要得到的价值。
目标表/ 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
节点到来。
您所显示的代码并未显示您遇到的问题。如果XPath将'/ xml'添加到开始,所以它找到任何东西,它只返回一行。即使添加第二行样本数据仍然只会得到两个结果 - 而不是四个,正如您似乎暗示的那样。你可以编辑你的问题,以显示更多的代表性数据,你目前得到的输出和你想要的输出吗?我可以猜到你可能真的有什么,但我不应该... –