Reputation: 2846
I have created a query to pull data from XML column of table however I am having issue when XML has list of data i.e.
Cola Brand has multiple code inside
See My query
select extract(cola_info, '/ns2:cola/coke/bottleCode', 'xmlns:ns2="http://myColaStaticInfo.com"') as op;
Output is something like
I would like to have highlighted content one after another and not together in one column.
Any idea!!!
MY XML look like this
<?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>
Upvotes: 0
Views: 72
Reputation: 9091
XMLTable
is probably your best choice for this. Especially since extract
has been deprecated.
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;
Output:
<code>Bottle_2829</code>
<code>Bottle_2830</code>
<code>Bottle_2831</code>
Upvotes: 1