如何在 PL/SQL 中读取 Result 标头 XML 标记

Posted

技术标签:

【中文标题】如何在 PL/SQL 中读取 Result 标头 XML 标记【英文标题】:How to read the Result header XML tag in PL/SQL 【发布时间】:2016-10-14 13:54:58 【问题描述】:

肥皂反应:

s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
  <GetResponse xmlns="http://temp.org/">
     <GetResult xmlns:a="http://schemas.datacontract.org/2004/07/ST" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <a:ResultHeader xmlns:b="http://schemas.datacontract.org/2004/07/CRM">
           <b:ResultCode>0000</b:ResultCode>
           <b:ResultDescription>Successful</b:ResultDescription>

           <b:TranscationID>?</b:TranscationID>
        </a:ResultHeader>

请建议我如何通过 pl/SQL 读取响应 xml 中的结果代码和结果描述,如果结果代码是 000,那么我将读取其他子节点值,否则代码不是 000,那么它将向用户显示异常。

【问题讨论】:

我认为你使用了错误的工具来完成这项工作,使用 xml 解析器在应用程序端应该会更好 【参考方案1】:

如果您的 XML 中只有一个 ResultHeader 节点,那么您可以通过这种方式检查 ResultCode

   -- get ResultCode value     
   l_resultCode:=  l_xml.extract('/s:Envelope/s:Body/GetResponse/GetResult/a:ResultHeader/b:ResultCode/text()', 'xmlns="http://tempuri.org/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/ xmlns:a="http://schemas.datacontract.org/2004/07/CRM" xmlns:b="http://schemas.datacontract.org/2004/07/CRM"').GetStringVal(); 

   -- check ResultCode
   IF l_resultCode = '000' THEN
       -- if OK then get value from child nodes  
   ELSE
       -- else raise exception
       l_resultDescription:= l_xml.extract('/s:Envelope/s:Body/GetResponse/GetResult/a:ResultHeader/b:ResultDescription/text()', 'xmlns="http://tempuri.org/" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/ xmlns:a="http://schemas.datacontract.org/2004/07/CRM" xmlns:b="http://schemas.datacontract.org/2004/07/CRM"').GetStringVal(); 
       raise_application_error(-20001, 'ResultCode='||l_resultCode||', ResultDescription='||l_resultDescription);
   END IF;    

【讨论】:

以上是关于如何在 PL/SQL 中读取 Result 标头 XML 标记的主要内容,如果未能解决你的问题,请参考以下文章

如何读取 pl/sql 过程中的值?

如何在 PL / SQL 中读取另一个游标内的游标

如何使用 PL/SQL 读取 Oracle 目录的所有文件并更新 BLOB 列

即使在 PL/SQL 中发生异常,也继续循环读取 excel 行

通过 PL SQL 读取 XML(存储在 Long 变量中)

Oracle pl/sql 从物理目录中读取文件的内容