2016-07-29 4 views
0

Ich habe folgende XML SOAP-Nutzlast extrahieren:wie Zufall Seife XML Payload Verwendung PL/SQL

<Errors> 
     <Error Code="386" NodeList="FAX=+52 808 669.6271" RecordID="ROOT" 
       ShortText="Invalidfax number" Status="Not Processed" /> 
     <Error Code="1000386" NodeList="Contact Title=empty" RecordID="ROOT" ShortText="Contact Title is required" 
       Status="Not Processed" /> 
     <Error Code="311" NodeList="Contact First Name=empty" RecordID="ROOT" ShortText="Required data missing: first name" 
       Status="Not Processed" /> 
     <Error Code="310" NodeList="Contact Last Name=empty" RecordID="ROOT" ShortText="Required data missing: last name" 
       Status="Not Processed" /> 
     <Error Code="316" NodeList="Contact Phone=empty" RecordID="ROOT" ShortText="Required data missing: phone number" 
       Status="Not Processed" /> 
    </Errors> 

Die Anzahl der Fehlerdatensätze zufällig empfangen werden soll, von 1 bis "N".

Ich kann die folgende Nutzlast analysieren, wenn es nur # 1 Fehlerprotokoll hat, Ausführung:

 vxmlns := 'xmlns="http://www.opentravel.org/OTA/2003/05"'; 
     vCode := xmltype.getClobVal(vXml.extract('//Error/@Code', vxmlns)); 
     vNodeList := xmltype.getClobVal(vXml.extract('//Error/@NodeList', vxmlns)); 
     vShortText := xmltype.getClobVal(vXml.extract('//Error/@ShortText', vxmlns)); 
     vStatus := xmltype.getClobVal(vXml.extract('//Error/@Status', vxmlns)); 
     vType := xmltype.getClobVal(vXml.extract('//Error/@RecordID', vxmlns)); 

Wie kann ich diese Nutzlast verarbeiten, um individuell jeden Fehler Datensatz zu verarbeiten?

Ein könnte wünschenswert ausgegeben werden:

Array[0]= "386 | FAX=+52 808 669.6271 | ROOT | Invalid fax number | Not Processed" 
Array[1]= "1000386 |Contact Title=empty |ROOT| Contact Title is required |Not Processed" 
..... 
..... 
Array[4]= "316 | Contact Phone=empty | ROOT | Required data missing: phone number | Not Processed" 

Dank

Antwort

2

Sie ein XMLTable query verwenden:

select * 
from XMLTable(
    '/Errors/Error' 
    passing XMLType('<Errors> 
     <Error Code="386" NodeList="FAX=+52 808 669.6271" RecordID="ROOT" 
       ShortText="Invalidfax number" Status="Not Processed" /> 
     <Error Code="1000386" NodeList="Contact Title=empty" RecordID="ROOT" ShortText="Contact Title is required" 
       Status="Not Processed" /> 
     <Error Code="311" NodeList="Contact First Name=empty" RecordID="ROOT" ShortText="Required data missing: first name" 
       Status="Not Processed" /> 
     <Error Code="310" NodeList="Contact Last Name=empty" RecordID="ROOT" ShortText="Required data missing: last name" 
       Status="Not Processed" /> 
     <Error Code="316" NodeList="Contact Phone=empty" RecordID="ROOT" ShortText="Required data missing: phone number" 
       Status="Not Processed" /> 
    </Errors>') 
    columns code number path '@Code', 
    nodeList varchar2(30) path '@NodeList', 
    RecordID varchar2(10) path '@RecordID', 
    shortText varchar2(40) path '@ShortText', 
    status varchar2(20) path '@Status' 
); 

     CODE NODELIST      RECORDID SHORTTEXT        STATUS    
---------- ------------------------------ ---------- ---------------------------------------- -------------------- 
     386 FAX=+52 808 669.6271   ROOT  Invalidfax number      Not Processed  
    1000386 Contact Title=empty   ROOT  Contact Title is required    Not Processed  
     311 Contact First Name=empty  ROOT  Required data missing: first name  Not Processed  
     310 Contact Last Name=empty  ROOT  Required data missing: last name   Not Processed  
     316 Contact Phone=empty   ROOT  Required data missing: phone number  Not Processed  

Ändern der passing Klausel Ihre SOAP-Nutzlast aufzunehmen - Sie haben nicht gezeigt, woher kommt das, also musst du das selbst anpassen. Und Sie können festlegen, dass die Auswahlliste die generierten Spalten in das von Ihnen benötigte Format ändert, anstatt select * zu verwenden.

+0

Hallo Alex, nochmals vielen Dank! Grüße –