当我知道命名空间和请求名称时,我能够解析 XML SOAP。
因为我有不同类型的 SOAP 请求,所以我想在 SOAP 文件中获取请求名称。我的 SOAP 的一部分摘录:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://schema.example.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>
<SOAP-ENV:Body>
**<ns1:SendMailling>**
<campagne xsi:type="ns1:Campaign"><ActivateDedup xsi:nil="true"/><BillingCode xsi:nil="true"/><DeliveryFax xsi:type="ns1:DeliveryFax"/>
<DeliveryMail xsi:type="ns1:DeliveryMail">
...
PHP代码:
if(is_file($file))
{
$content=file_get_contents($file);
$xml = simplexml_load_string($content);
$xml->registerXPathNamespace('ns1', 'http://schema.example.com');
foreach ($xml->xpath('\\SOAP-ENV:') as $item)
{
//certainly the bad way?
echo "<pre>";
print_r($item);
echo "</pre>";
}
echo "<pre>";
print_r($xml);
echo "</pre>";
}
我没有得到任何结果......我想让出现:'SendMailling'(识别请求名称)
当我特别指定
//foreach($xml->xpath('//ns1:SendMailling') as $item)
没有问题。
我试过 了foreach($xml->xpath('//ns1') as $item)
,$xml->xpath('//SOAP-ENC'), $xml->xpath('//Body')
但是...