使用simplexml_load_string进行SOAP XML解析



我试图解析一个简单的xml soap响应与simplexml_load_string没有成功。我已经尝试了很多在其他问题上发现的方法,但都没有成功。

XML是:

<?xml version="1.0" encoding="utf-8" ?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP-ENV:Body>
    <m:F2bCobrancaRetorno xmlns:m="http://www.f2b.com.br/soap/wsbilling.xsd">
      <sacado numero="0000000015">
        <nome>Pedro Fernandes Steimbruch</nome>
        <email>pedrofsteimbruch@gmail.com</email>
      </sacado>
      <cobranca nosso_numero="0004912903" numero="0004912903" taxa_registro="0.00">
        <nome>Pedro Fernandes Steimbruch</nome>
        <email>pedrofsteimbruch@gmail.com</email>
        <url>http://www.f2b.com.br/Billing?id=eq5GuK</url>
      </cobranca>
      <log>OK&#13;</log>
    </m:F2bCobrancaRetorno>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我想获得日志和url对象

您可能考虑到了这一点,但是该XML文档使用了名称空间。这就是XML标记中的冒号的含义。理论上,文档中给出的uri告诉解析器在哪里可以找到该名称空间中元素的模式。要使用simpleXml完成此操作,您需要解析文件以获得该名称空间的URI,或者在本例中简单地对其进行硬编码,即。"http://www.f2b.com.br/soap/wsbilling.xsd"。然后将URI传递给SimpleXml Object的children()方法。

在本例中,$document包含包含SOAP数据的SimpleXML对象。$subDocument是一个新的SimpleXML文档,它包含了命名空间"m"中的元素。

   $subDocument = $document->children("http://www.f2b.com.br/soap/wsbilling.xsd");
   echo $subDocument->log;

由于有两个名称空间(SOAP_ENV和m),一个嵌套在另一个内部,我不知道您是否必须在访问"m"之前访问"SOAP-ENV",或者您是否可以直接跳转到"m"。

本页对此进行了讨论。http://www.sitepoint.com/simplexml-and-namespaces/

相关内容

  • 没有找到相关文章

最新更新