3
 <?xml version="1.0" ?> 
  <aws:UrlInfoResponse 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:OperationRequest>
    <aws:UrlInfoResult>
     <aws:Alexa>
      <aws:TrafficData>
       <aws:DataUrl type="canonical">google.com/</aws:DataUrl> 
       <aws:Rank>1</aws:Rank> 
      </aws:TrafficData>
     </aws:Alexa>
    </aws:UrlInfoResult>
    <aws:ResponseStatus xmlns:aws="http://alexa.amazonaws.com/doc/2005-10-05/">
     <aws:StatusCode>Success</aws:StatusCode> 
    </aws:ResponseStatus>
   </aws:Response>
  </aws:UrlInfoResponse>

我只想解析这个 xml 文档中的排名。在尝试时,我正在做的是......

        $xml= simplexml_load_file("path of the file saved");
        echo $xml->Response->UrlInfoResult->Alexa->TrafficData->Rank;

但我这样做会出错。它说

 Notice: Trying to get property of non-object in C:\wamp\www\SEO Stats[Only Testing]\Tools\web_worth.php on line 13

错误在这一行

 echo $xml->Response->UrlInfoResult->Alexa->TrafficData->Rank;
 this line is referred as line no 13..
4

3 回答 3

9

解析器返回一个空对象,因为根据文档,您必须指定前缀命名空间 - 例如,您想使用以下内容:

simplexml_load_file('/path/to/file.xml', null, null, 'aws', true);

工作示例

于 2013-04-03T12:47:15.703 回答
0

您可能将结果对象嵌套错误,因此其中一个对象$xml->Response->UrlInfoResult->Alexa->TrafficData->Rank;为空。分别尝试echo每一步:

echo $xml->Response;
echo $xml->Response->UrlInfoResult;
// etc ...

如果第一个回显没有返回任何内容,则检查您是否需要改为输出UrlInfoResponse或需要先注册命名空间。

于 2013-04-03T12:28:44.047 回答
0

好的,这太模糊了,但是您总是可以打印 $xml 值以查看它是否实际上是一个对象,有时会发生路径错误。试试这段代码,看看是否真的加载了 xml 文档:

<?php

if (file_exists('/path/to/document.xml')) {
    $xml = simplexml_load_file('/path/to/document.xml');

    print_r($xml);
} else {
    exit('Failed to open /path/to/document.xml.');
}

?>

有了这个,您应该看到 xml 文档的内容。

于 2013-04-03T12:29:54.443 回答