Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.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 SimpleXML解析问题_Php_Soap_Xpath - Fatal编程技术网

Php SimpleXML解析问题

Php SimpleXML解析问题,php,soap,xpath,Php,Soap,Xpath,全部, 正在尝试分析此SOAP响应,但xpath()正在返回 调试警告:SimpleXMLElement::xpath()未定义命名空间前缀 调试警告:SimpleXMLElement::xpath()计算失败 $result = '<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">

全部,

正在尝试分析此SOAP响应,但xpath()正在返回

调试警告:SimpleXMLElement::xpath()未定义命名空间前缀 调试警告:SimpleXMLElement::xpath()计算失败

 $result = '<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <env:Header xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
    <env:Body xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <v4:TrackReply xmlns:v4="http://fedex.com/ws/track/v4">
            ...
        </v4:TrackReply>
    </env:Body>
</soapenv:Envelope>';


 $xml = simplexml_load_string($result,NULL,NULL,'http://schemas.xmlsoap.org/soap/envelope/');



foreach($xml->xpath('env:Body') as $body){

    //drill down here...
}
$result=
...
';
$xml=simplexml\u load\u字符串($result,NULL,NULL,'http://schemas.xmlsoap.org/soap/envelope/');
foreach($xml->xpath('env:Body')作为$Body){
//在这里钻研。。。
}

SimpleXML忽略XML结构的
env:
部分,而是返回如下构造的对象:

SimpleXMLElement Object
(
    [Header] => SimpleXMLElement Object
        (
        )

    [Body] => SimpleXMLElement Object
        (
        )

)

您可以通过以下XPath查询访问主体:
$xml->XPath('body')
,或者只使用以下语法访问子对象:
$xml->body

SimpleXML忽略xml结构的
env:
部分,而是返回如下构造的对象:

SimpleXMLElement Object
(
    [Header] => SimpleXMLElement Object
        (
        )

    [Body] => SimpleXMLElement Object
        (
        )

)

您可以通过以下XPath查询访问主体:
$xml->XPath('body')
,或者只使用以下语法访问子对象:
$xml->body

尝试将命名空间注册到“env”

$xml->registerXPathNamespace('env','http://schemas.xmlsoap.org/soap/envelope/');

编辑 此代码设置
body

$bodies = $xml->xpath('env:Body');
foreach($bodies as $body){
    $reply = $body->children('v4', TRUE)->TrackReply;
    var_dump($reply);
}
或者,您可以通过以下方式直接获得类似于
TrackReply
的元素:

$xml->registerXPathNamespace('env', 'http://schemas.xmlsoap.org/soap/envelope/');
$xml->registerXPathNamespace('v4', 'http://fedex.com/ws/track/v4');
var_dump($xml->xpath('env:Body/v4:TrackReply'));

尝试将命名空间注册到“env”

$xml->registerXPathNamespace('env','http://schemas.xmlsoap.org/soap/envelope/');

编辑 此代码设置
body

$bodies = $xml->xpath('env:Body');
foreach($bodies as $body){
    $reply = $body->children('v4', TRUE)->TrackReply;
    var_dump($reply);
}
或者,您可以通过以下方式直接获得类似于
TrackReply
的元素:

$xml->registerXPathNamespace('env', 'http://schemas.xmlsoap.org/soap/envelope/');
$xml->registerXPathNamespace('v4', 'http://fedex.com/ws/track/v4');
var_dump($xml->xpath('env:Body/v4:TrackReply'));

通过调用registerXPathNamespace(),我能够进入我的foreach循环,因为$xml->xpath('env:Body')现在创建了一个空的simplexmlementobject@Slinky请参阅更新的答案-SimpleXMLElement对象看起来确实是空的,但实际上包含我看到的信息。这很有帮助。感谢调用registerXPathNamespace()我能够进入我的foreach循环,因为$xml->xpath('env:Body')现在创建了一个空的simplexmlementobject@Slinky请参阅更新的答案-SimpleXMLElement对象看起来确实是空的,但实际上包含我看到的信息。这很有帮助。谢谢