PHP将XML信封解析为XML
问题描述:
我一直在这一整天,感觉像我无处可去,我需要得到这个显示为一个XML,就像它是如何在这个页面上http://admin.stock.imdfulfilment.com/api/service.asmx/GetCouriers。然而,下面的代码PHP将XML信封解析为XML
<?
try
{
$soap_url = 'http://admin.stock.imdfulfilment.com/api/service.asmx?wsdl';
$client = new SoapClient($soap_url, array(
'trace' => 1,
'exceptions'=>true,
'GetCouriersResult' => 'xml')
);
$client->GetCouriers();
$xml = simplexml_load_string($client->__getLastResponse());
$xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/');
$xml->registerXPathNamespace('xsi', 'http://www.w3.org/2001/XMLSchema-instance');
$xml->registerXPathNamespace('xsd', 'http://www.w3.org/2001/XMLSchema');
foreach($xml->xpath('//soap:Envelope') as $item) {
echo "$item\n\n";
}
}
catch (Exception $e)
{
print_r($e);
}
?>
答
它返回双重编码XML,我不知道为什么有人认为,一个好主意(也许有人谁不希望有更新他们的WSDL打扰):
$soap_url = 'http://admin.stock.imdfulfilment.com/api/service.asmx?wsdl';
$client = new SoapClient($soap_url, array(
'trace' => 1,
'exceptions'=>true,
'GetCouriersResult' => 'xml')
);
$result = $client->GetCouriers();
echo $result->GetCouriersResult->any;
//or you can load it in DOM or simpleXML if you need to read it;
$the_response_should_have_been = new simpleXMLElement($result->GetCouriersResult->any);