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 : Sélectionner tout - Visualiser dans une fenêtre à part
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?