<aws:TrafficHistoryResponse xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/">
<aws:Response xmlns:aws="http://awis.amazonaws.com/doc/2005-07-11">
<aws:OperationRequest>
<aws:RequestId>0effb937-80d1-431d-80c2-95a883de1040</aws:RequestId>
</aws:OperationRequest>
<aws:TrafficHistoryResult>
<aws:Alexa>
<aws:TrafficHistory>
<aws:Range>2</aws:Range>
<aws:Site>http://xeler8.com/</aws:Site>
<aws:Start>2016-03-01</aws:Start>
<aws:HistoricalData>
<aws:Data>
<aws:Date>2016-03-01</aws:Date>
<aws:PageViews>
<aws:PerMillion>0.06</aws:PerMillion>
<aws:PerUser>1.00</aws:PerUser>
</aws:PageViews>
<aws:Rank>339328</aws:Rank>
<aws:Reach>
<aws:PerMillion>5</aws:PerMillion>
</aws:Reach>
</aws:Data>
<aws:Data>
<aws:Date>2016-03-02</aws:Date>
<aws:PageViews>
<aws:PerMillion>0.03</aws:PerMillion>
<aws:PerUser>1.00</aws:PerUser>
</aws:PageViews>
<aws:Rank>686679</aws:Rank>
<aws:Reach>
<aws:PerMillion>2</aws:PerMillion>
</aws:Reach>
</aws:Data>
</aws:HistoricalData>
</aws:TrafficHistory>
</aws:Alexa>
</aws:TrafficHistoryResult>
<aws:ResponseStatus xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/">
<aws:StatusCode>Success</aws:StatusCode>
</aws:ResponseStatus>
</aws:Response>这是我想在php中解析的响应,希望获取Rank节点的值。
$xml = new SimpleXMLElement($response,null,false,
'http://awis.amazonaws.com/doc/2005-07-11');
echo $xml->TrafficHistoryResponse->Response->TrafficHistoryResult->Alexa->TrafficHistory->HistoricalData->Data->Rank;使用此方法,但无法获得数据获取错误的
PHP注意:在第100行的/home/ras-al/下载/urlinfo.php中尝试获取非对象的属性
发布于 2016-08-11 14:13:56
首先,您的XML文档在结束时缺少了关闭的aws:TrafficHistoryResponse标记。
可以检索Rank节点的文本值,如下所示:
$xml = new SimpleXMLElement($response);
$xml->registerXPathNamespace('a', 'http://awis.amazonaws.com/doc/2005-07-11');
foreach ($xml->xpath("//a:Rank") as $rank) {
echo $rank . PHP_EOL;
}输出:
339328 686679
发布于 2016-08-11 13:22:06
您的XML文件无效,请在文档末尾添加以下2行:
</aws:Response>
</aws:TrafficHistoryResponse>诀窍是执行$response = str_replace("aws:","",$response);以避免命名空间的问题:)
在这里,完整的代码:
$response ='<aws:TrafficHistoryResponse xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/">
<aws:Response xmlns:aws="http://awis.amazonaws.com/doc/2005-07-11">
<aws:OperationRequest>
<aws:RequestId>0effb937-80d1-431d-80c2-95a883de1040</aws:RequestId>
</aws:OperationRequest>
<aws:TrafficHistoryResult>
<aws:Alexa>
<aws:TrafficHistory>
<aws:Range>2</aws:Range>
<aws:Site>http://xeler8.com/</aws:Site>
<aws:Start>2016-03-01</aws:Start>
<aws:HistoricalData>
<aws:Data>
<aws:Date>2016-03-01</aws:Date>
<aws:PageViews>
<aws:PerMillion>0.06</aws:PerMillion>
<aws:PerUser>1.00</aws:PerUser>
</aws:PageViews>
<aws:Rank>339328</aws:Rank>
<aws:Reach>
<aws:PerMillion>5</aws:PerMillion>
</aws:Reach>
</aws:Data>
<aws:Data>
<aws:Date>2016-03-02</aws:Date>
<aws:PageViews>
<aws:PerMillion>0.03</aws:PerMillion>
<aws:PerUser>1.00</aws:PerUser>
</aws:PageViews>
<aws:Rank>686679</aws:Rank>
<aws:Reach>
<aws:PerMillion>2</aws:PerMillion>
</aws:Reach>
</aws:Data>
</aws:HistoricalData>
</aws:TrafficHistory>
</aws:Alexa>
</aws:TrafficHistoryResult>
<aws:ResponseStatus xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/">
<aws:StatusCode>Success</aws:StatusCode>
</aws:ResponseStatus>
</aws:Response>
</aws:TrafficHistoryResponse>';
$response = str_replace("aws:","",$response);
try {
$xml = new SimpleXmlElement($response);
} catch (Exception $e) {
echo $e;
}
$data = $xml->xpath("//TrafficHistoryResponse/Response/TrafficHistoryResult/Alexa/TrafficHistory/HistoricalData/Data[last()]");
print_r($data[0]->Rank);https://stackoverflow.com/questions/38894275
复制相似问题