使用simplexml_load_string进行SOAP XML解析

时间:2011-08-02 15:53:52

标签: php soap simplexml soap-client

我正在尝试使用simplexml_load_string解析一个简单的xml soap响应,但没有成功。我已经尝试了很多我在其他问题中找到的方法而没有成功。

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>

我想获取日志和网址对象。

1 个答案:

答案 0 :(得分:0)

您可能正在考虑它,但该XML文档使用名称空间。这就是XML标记中的冒号意味着什么。理论上,文档中给出的URI告诉解析器在哪里可以找到该命名空间中元素的模式。要使用simpleXml执行此操作,您需要解析该文件以获取该名称空间的URI,或者在这种情况下只需对其进行硬编码,即“http://www.f2b.com.br/soap/wsbilling.xsd” 。然后将URI传递给SimpleXml对象的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/