我正在尝试使用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 </log>
</m:F2bCobrancaRetorno>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我想获取日志和网址对象。
答案 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”。