我试图解析一个简单的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 </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/