| Extract data from XML [message #486800] |
Mon, 20 December 2010 06:08  |
amit_kiran
Messages: 50 Registered: July 2006 Location: UK
|
Member |

|
|
Hi,
I want to retrieve values from a XML data stored on CLOB data type and store it in different table.
Can someone help me with retrieving data from Soap Envelope and Soap Body?
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope>
<soap:Header>
<company>US</company>
</soap:Header>
<soap:Body>
Data
</soap:Body>
<Account>ABCD1234</Account>
</soap:Envelope>
Thanks a lot..
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| Re: Extract data from XML [message #486863 is a reply to message #486860] |
Mon, 20 December 2010 23:28   |
 |
Michel Cadot
Messages: 54693 Registered: March 2007 Location: Nanterre, France, http://...
|
Senior Member Account Moderator |
|
|
Quote:, it gives error
Please share the error.
Please share the code (not just one line we are not sure the error we don't know, comes from).
Please copy and paste the execution from SQL*Plus we can then see what happen.
Please read OraFAQ Forum Guide, especially "How to post" section.
SQL> col account format a20
SQL> col forename format a20
SQL> with data as (
2 select xmltype('<?xml version="1.0" encoding="utf-8"?>
3 <soap:Envelope xmlns:xsi="http://www.o3.org/2001/XMLSchema-instance"
4 xmlns:xsd="http://www.o3.org/2001/XMLSchema"
5 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
6 <soap:Header>
7 <company>US</company>
8 </soap:Header>
9 <soap:Body>
10 </soap:Body>
11 <Account>ABCD1234</Account>
12 <party id="336" type="Person" assoc="RegisteredContact on policy">
13 <Forename>ABCD</Forename>
14 </party>
15 <party id="337" type="Person" assoc="RegisteredContact on policy">
16 <Forename>ABCDEF</Forename>
17 </party>
18 </soap:Envelope>') val from dual
19 )
20 select extractvalue(val, '//Account',
21 'xmlns:xsi="http://www.o3.org/2001/XMLSchema-instance"
22 xmlns:xsd="http://www.o3.org/2001/XMLSchema"
23 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"')
24 Account,
25 extractvalue(value(x), '//Forename',
26 'xmlns:xsi="http://www.o3.org/2001/XMLSchema-instance"
27 xmlns:xsd="http://www.o3.org/2001/XMLSchema"
28 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"')
29 Forename
30 from data, table(xmlsequence(extract(val, '//Forename',
31 'xmlns:xsi="http://www.o3.org/2001/XMLSchema-instance"
32 xmlns:xsd="http://www.o3.org/2001/XMLSchema"
33 xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"'))) x
34 /
ACCOUNT FORENAME
-------------------- --------------------
ABCD1234 ABCD
ABCD1234 ABCDEF
Regards
Michel
[Updated on: Tue, 21 December 2010 01:10] Report message to a moderator
|
|
|
|
| Re: Extract data from XML [message #486878 is a reply to message #486863] |
Tue, 21 December 2010 01:12  |
_jum
Messages: 459 Registered: February 2008
|
Senior Member |
|
|
You can simplify the query:
WITH data AS (
SELECT XMLTYPE(
'<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.o3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.o3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<company>US</company>
</soap:Header>
<soap:Body>
</soap:Body>
<Account>ABCD1234</Account>
<party id="336" type="Person" assoc="RegisteredContact on policy">
<Forename>ABCD</Forename>
</party>
<party id="337" type="Person" assoc="RegisteredContact on policy">
<Forename>ABCDEF</Forename>
</party>
</soap:Envelope>') val FROM dual)
SELECT extractvalue(val, '//Account') account,
extractvalue(value(x), '//Forename') forename
FROM data, table(xmlsequence(extract(val, '//Forename'))) x;
ACCOUNT FORENAME
-------------------- --------------------
ABCD1234 ABCD
ABCD1234 ABCDEF
|
|
|
|