PHP - 创建SimpleXmlElement对象时,SOAP xml返回空

时间:2016-11-24 11:37:57

标签: php xml web-services soap

我现在已经试图解决这个问题超过一个小时了,我放弃了。我从网络服务获得以下回复。

我希望能够访问Fault的子项(我有这个工作用于另一个webservice调用,但由于某种原因,我认为可能与命名空间相关,这个不起作用)。< / p>

<soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <soap:Fault>
            <faultcode>soap:Server</faultcode>
            <faultstring>Invalid Scope</faultstring>
            <detail>
                <faultresponse xmlns="xsd url" xmlns:ns2="xsd url">
                    <transactionid>TEST</transactionid>
                    <errorcode>ERR-4223</errorcode>
                </faultresponse>
            </detail>
        </soap:Fault>
    </soap:Body>
</soap:envelope>

我的PHP代码非常简单。首先,我从上面的xml创建SimpleXmlElement对象。

我得到了xml中的命名空间列表(它选择了两个:&#34; soap&#34;和&#34;&#34;)。然后我在soap:namespace中获取XML的子代。

$xml = simplexml_load_string($response_xml);
$namespace = $xml->getNamespaces(true);
$soap = $xml->children($namespace['soap']);

鉴于上述代码。我希望能够做到这样的事情:

$fault_fields = $soap->Body->children()->Fault->children();

foreach ($fault_fields as $field):
   echo (string) $field->getName() . ' - ' . $field[0] . '<br />';
endforeach;

但是,如果我运行$ soap-&gt; asXML();我可以看到以下内容:

<soap:Body>
            <soap:Fault>
                <faultcode>soap:Server</faultcode>
                <faultstring>Invalid Scope</faultstring>
                <detail>
                    <faultresponse xmlns="xsd url" xmlns:ns2="xsd url">
                        <transactionid>TEST</transactionid>
                        <errorcode>ERR-4223</errorcode>
                    </faultresponse>
                </detail>
            </soap:Fault>
        </soap:Body>

但是,如果我尝试访问Body或Fault:

$soap = &$this->parse_soap_body($response_xml);
$body = $soap->Body->children()->Fault->children();
echo $body->asXML();

我得到一个Node不再存在错误,堆栈返回此XML。

<soap:Envelope xmlns:soap="`http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <soap:Fault>
      <faultcode>soap:Server</faultcode>
      <faultstring>Invalid Scope</faultstring>
.... more xml

这是我的头脑。

非常感谢任何帮助。

0 个答案:

没有答案