PHP解析SOAP响应

PHP解析SOAP响应,php,xml,soap,Php,Xml,Soap,我试图解析以下SOAP响应,需要一些指导: <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"> <env:Header/> <env:Body> <ns2:LookupResponse xmlns:ns2="http://path-to/schemas"> <ns2:Name>My Name</n

我试图解析以下SOAP响应,需要一些指导:

<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
    <env:Header/>

    <env:Body>
        <ns2:LookupResponse xmlns:ns2="http://path-to/schemas">
        <ns2:Name>My Name</ns2:Name>
        <ns2:Address1>test</ns2:Address1>
        <ns2:Address2>test</ns2:Address2>
        ...
        </ns2:LookupResponse>
    </env:Body>
</env:Envelope>
我对所有这些都不熟悉,所以请原谅明显的错误,但我正尝试将响应作为对象进行迭代,正如simpleXML扩展解析的那样,引用so答案并使用插件回送对象内容

if(empty($ch_error))
{
    $xml    = simplexml_load_string($ch_result, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/");
    $xml    ->registerXPathNamespace('env', 'http://schemas.xmlsoap.org/soap/envelope/');
    $xml    ->registerXPathNamespace('ns2', 'http://path-to/schemas');


    echo '<pre>';
    simplexml_dump($xml);
    echo '</pre>';

}
else
{
    echo 'error';
    show($ch_error);
    exit;
}
我想进入这样一个阶段:我可以使用
foreach
循环,或者直接指向相关数据(
$title=(string)$data->title;
)。我怎样才能从目前的职位上走到那个阶段?我真的不知道接下来会发生什么,我只是完全不理解PHP中为SOAP扩展提供的文档。我宁愿使用“基本”代码来实现我需要的功能。

适应您的问题:

适应您的问题:


谢谢你的推荐。尝试此操作(使用相同的代码):
$xml=simplexml\u load\u string($ch\u result)$ns=$xml->getnamespace(true)$信封=$xml->children($ns['env'])$body=$envelope->body->children($ns['ns2']);echo$body->Name返回
警告:main():节点不再存在
。显然,我在某个地方遗漏了一个步骤(尽管逻辑对我来说越来越清楚).
$body
包含
LookupResponse
的父级,因此您必须循环它们以获得所有考虑过的名称!您可以这样做:
foreach($body->LookupResponse as$item){echo$item->Name.PHP_EOL;}
。还要非常小心你的元素:身体!所以你必须写:
$body=$envelope->body->children($ns['ns2'])。非常感谢。。保存了用于该引用的甲烷罐。尝试此操作(使用相同的代码):
$xml=simplexml\u load\u string($ch\u result)$ns=$xml->getnamespace(true)$信封=$xml->children($ns['env'])$body=$envelope->body->children($ns['ns2']);echo$body->Name返回
警告:main():节点不再存在
。显然,我在某个地方遗漏了一个步骤(尽管逻辑对我来说越来越清楚).
$body
包含
LookupResponse
的父级,因此您必须循环它们以获得所有考虑过的名称!您可以这样做:
foreach($body->LookupResponse as$item){echo$item->Name.PHP_EOL;}
。还要非常小心你的元素:身体!所以你必须写:
$body=$envelope->body->children($ns['ns2'])。非常感谢。。救了我
if(empty($ch_error))
{
    $xml    = simplexml_load_string($ch_result, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/");
    $xml    ->registerXPathNamespace('env', 'http://schemas.xmlsoap.org/soap/envelope/');
    $xml    ->registerXPathNamespace('ns2', 'http://path-to/schemas');


    echo '<pre>';
    simplexml_dump($xml);
    echo '</pre>';

}
else
{
    echo 'error';
    show($ch_error);
    exit;
}
SimpleXML object (1 item)
[
Element {
    Namespace: 'http://schemas.xmlsoap.org/soap/envelope/'
    Namespace Alias: 'env'
    Name: 'Envelope'
    String Content: ''
    Content in Namespace env
        Namespace URI: 'http://schemas.xmlsoap.org/soap/envelope/'
        Children: 2 - 1 'Body', 1 'Header'
        Attributes: 0
}
]
$xml = simplexml_load_string($ch_result, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/");
$ns = $xml->getNamespaces(true);
$soap = $xml->children($ns['env']);
$res = $soap->Body->children($ns['ns2']);

foreach ($res->LookupResponse as $item) {
    echo $item->Name.PHP_EOL;
}