Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP以不同的方式解析SOAP响应_Php_Soap_Nusoap - Fatal编程技术网

用PHP以不同的方式解析SOAP响应

用PHP以不同的方式解析SOAP响应,php,soap,nusoap,Php,Soap,Nusoap,可能重复: 我有一个简单的nuSoap XML响应: <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"

可能重复:

我有一个简单的nuSoap XML响应:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <LoginResult xmlns="http://Siddin.ServiceContracts/2006/09">FE99E5267950B241F96C96DC492ACAC542F67A55</LoginResult>
    </soap:Body>
</soap:Envelope>
但我仍然只能得到这样的结果:

/* array ( )
我做错了什么?或者我错过了什么简单的事情去理解


DOM的最终工作结果是:

SimpleXML的最终工作结果是:


这里的问题是SimpleXML的默认名称空间支持很差。为了使用XPath表达式获取该节点,您需要为默认名称空间注册前缀并在查询中使用它,即使元素没有前缀,例如:

foreach($xml->xpath('//soap:Body') as $header) {
    $header->registerXPathNamespace('default', 'http://Siddin.ServiceContracts/2006/09');
    var_export($header->xpath('//default:LoginResult'));
}
但是,实际上不需要使用XPath访问此节点,您可以直接访问它:

foreach($xml->xpath('//soap:Body') as $header) {
    var_export($header->LoginResult);
}

我建议您使用PHP DOMDocument您想要使用DOMDocument的替代解决方案吗?如果您将var_export更改为echo,我不会从中得到任何结果,它将返回,而不会返回“mark var_export只是向您显示它是strings谢谢您为我提供的新方法;”谢谢你的回答。我真的很感激你……)谢谢你的回答。这似乎在某种程度上起了作用,但给了我这样的字符串,它仍然不是我所需要的:
simplexmlement::\uu设置状态(数组(0=>'FE99E5267950B241F96C96DC492ACAC542F67A55')
好吧,我已经修改了你的示例代码,当然这就是SimpleXML节点的
var\u导出
的样子,如果需要访问该值,只需将节点强制转换为字符串:
(string)$header->LoginResult
Thanx m8,太糟糕了,我不能接受两个答案。没问题,投票也可以;)
$xml = simplexml_load_string( $response );
foreach($xml->xpath('//soap:Body') as $header) {
    echo (string)$header->LoginResult;
}
$doc = new DOMDocument();
$doc->loadXML( $yourxmlresponse );

$LoginResults = $doc->getElementsByTagName( "LoginResult" );
$LoginResult = $LoginResults->item(0)->nodeValue;

var_export( $LoginResult );
foreach($xml->xpath('//soap:Body') as $header) {
    $header->registerXPathNamespace('default', 'http://Siddin.ServiceContracts/2006/09');
    var_export($header->xpath('//default:LoginResult'));
}
foreach($xml->xpath('//soap:Body') as $header) {
    var_export($header->LoginResult);
}