首页 > 解决方案 > 甲骨文 | 使用正则表达式导出的 XML 数据

问题描述

我创建了一个查询来从表的 XML 列中提取数据但是当 XML 有数据列表时我遇到了问题,即

可乐品牌里面有多个代码

查看我的查询

select extract(cola_info, '/ns2:cola/coke/bottleCode', 'xmlns:ns2="http://myColaStaticInfo.com"') as op;

输出类似于

在此处输入图像描述

我想一个接一个地突出显示内容,而不是在一列中一起突出显示。

任何想法!!!

我的 XML 看起来像这样

<?xml version="1.0" encoding="ISO-8859-15" standalone="yes"?>
<ns2:cola xmlns:ns2="http://myColaStaticInfo.com">
    <coke>
        <code>Bottle_2829</code>
        <label>Mirinda</label>
    </coke>
    <coke>
        <code>Bottle_2830</code>
        <label>Mirinda</label>
    </coke>
    <coke>
        <code>Bottle_2831</code>
        <label>Mirinda</label>
    </coke>
</ns2:cola>

标签: oracle

解决方案


XMLTable可能是您最好的选择。尤其是extract在被弃用之后。

with example_data as (select xmltype('<?xml version="1.0" encoding="ISO-8859-15" standalone="yes"?>
<ns2:cola xmlns:ns2="http://myColaStaticInfo.com">
    <coke>
        <code>Bottle_2829</code>
        <label>Mirinda</label>
    </coke>
    <coke>
        <code>Bottle_2830</code>
        <label>Mirinda</label>
    </coke>
    <coke>
        <code>Bottle_2831</code>
        <label>Mirinda</label>
    </coke>
</ns2:cola>') as xml from dual)
-- query
select bottle_coke
from example_data e
cross join XMLTABLE(XMLNAMESPACES('http://myColaStaticInfo.com' as "ns2"),
        '/ns2:cola/coke'
         PASSING e.xml
         COLUMNS 
           bottle_coke XMLTYPE PATH 'code'
         ) xt;

输出:

<code>Bottle_2829</code>
<code>Bottle_2830</code>
<code>Bottle_2831</code>

推荐阅读