【问题标题】:how to extract random soap xml payload using PL/SQL如何使用 PL/SQL 提取随机肥皂 xml 有效负载
【发布时间】:2016-12-04 17:11:49
【问题描述】:

我有以下 SOAP XML 负载:

    <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>

要接收的错误记录的数量是随机的,从 1 到“N”。

当它只有 #1 错误记录时,我可以解析以下有效负载,执行:

        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));

如何处理此有效负载以便单独处理每个错误记录?

理想的输出可能是:

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" 

谢谢

【问题讨论】:

    标签: sql xml oracle soap plsql


    【解决方案1】:

    您可以使用XMLTable query

    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       
    

    更改 passing 子句以获取您的 SOAP 有效负载 - 您还没有显示它的来源,因此您必须自己调整它。您可以让选择列表将生成的列操作为您需要的任何格式,而不是使用select *

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多