Extraire XML via procedure
Bonjour
J’ai besoin de pouvoir extraire les informations d’un XML (pour l’instant j’utilise un DBMS)
Dans l’exemple suivant je tente de faire um DBMS des valeurs de mon XML, le problème est que comme j’ai plusieur foi la tag <TICKET_NO> Oracle me retourne une erreur(ORA-19025: EXTRACTVALUE returns value of only one node).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
DECLARE
--
retval xmltype := xmltype('<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<env:Body>
<TICKETCreateRespMsg xmlns="http://www.testurl.com/webservices/">
<body xmlns="">
<CreateTicket>
<TICKET_NO>A-32758628</TICKET_NO>
<TICKET_NO>C-32758628</TICKET_NO>
<TICKET_NO>B-32758628</TICKET_NO>
<SUMMARY>Test1</SUMMARY>
<ERROR_MSG>Test2</ERROR_MSG>
</CreateTicket>
</body>
</TICKETCreateRespMsg>
</env:Body>
</env:Envelope>');
v_ticket_no VARCHAR2(30);
v_summary VARCHAR2(30);
v_error_msg VARCHAR2(30);
v_ns_map VARCHAR2(200) := 'xmlns:env="http://schemas.xmlsoap.org/soap/envelope/", xmlns:ns1="http://www.testurl.com/webservices/"';
v_xpath VARCHAR2(200) := '/env:Envelope/env:Body/ns1:TICKETCreateRespMsg/body/CreateTicket';
--
BEGIN
--
FOR I IN (SELECT extractValue(retval, v_xpath || '/TICKET_NO', v_ns_map) TICKET_NO,
extractValue(retval, v_xpath || '/SUMMARY', v_ns_map) SUMMARY ,
extractValue(retval, v_xpath || '/ERROR_MSG', v_ns_map)ERROR_MSG
--INTO v_ticket_no, v_summary, v_error_msg
FROM dual) LOOP
--
dbms_output.put_line('TICKET_NO = '||i.TICKET_NO);
dbms_output.put_line('SUMMARY = '|| i.summary);
dbms_output.put_line('ERROR_MSG = '|| i.error_msg);
--
END LOOP;
--
END; |
Avez-vous une idée de comment faire pour extraire toutes les valeurs de mon XML?