2012-03-13 62 views
0

我有以下使用命名空间的XML文件。php xml字符串获取属性使用命名空间

当我用下面的PHP函数,它不会为AWS返回的属性:国家代码

$xml = new SimpleXMLElement($response,null,false, 
          'http://awis.amazonaws.com/doc/2005-07-11') 

所以我想知道。我如何取出国家代码属性?我是否需要创建特殊功能?以下是返回卷曲调用的字符串。

<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:RequestId>e3459429-82f5-f598-0219-18a8056cad27</aws:RequestId> 
</aws:OperationRequest> 

<aws:UrlInfoResult> 

<aws:Alexa> 

<aws:TrafficData> 
    <aws:DataUrl type="canonical">samplesite.com</aws:DataUrl> 
    <aws:Rank>47216</aws:Rank> 
     <aws:RankByCountry> 
     <aws:Country Code="US"> 

      <aws:Rank>11438</aws:Rank> 
      <aws:Contribution> 
       <aws:PageViews>72.5%</aws:PageViews> 
       <aws:Users>76.4%</aws:Users> 
      </aws:Contribution> 
     </aws:Country> 
     <aws:Country Code="IN"> 
     <aws:Rank>45749</aws:Rank> 
     <aws:Contribution> 
      <aws:PageViews>17.0%</aws:PageViews> 
      <aws:Users>7.5%</aws:Users> 
     </aws:Contribution> 
    </aws:Country> 
    </aws:RankByCountry> 
</aws:TrafficData> 
</aws:Alexa> 
</aws:UrlInfoResult> 
</aws:Response> 
</aws:UrlInfoResponse>   

回答

1
<?php 

$xml=<<<EOF 
<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:RequestId>e3459429-82f5-f598-0219-18a8056cad27</aws:RequestId> 
</aws:OperationRequest> 

<aws:UrlInfoResult> 

<aws:Alexa> 

<aws:TrafficData> 
    <aws:DataUrl type="canonical">samplesite.com</aws:DataUrl> 
    <aws:Rank>47216</aws:Rank> 
     <aws:RankByCountry> 
    <aws:Country Code="US"> 

     <aws:Rank>11438</aws:Rank> 
     <aws:Contribution> 
      <aws:PageViews>72.5%</aws:PageViews> 
      <aws:Users>76.4%</aws:Users> 
     </aws:Contribution> 
     </aws:Country> 
     <aws:Country Code="IN"> 
    <aws:Rank>45749</aws:Rank> 
    <aws:Contribution> 
     <aws:PageViews>17.0%</aws:PageViews> 
     <aws:Users>7.5%</aws:Users> 
    </aws:Contribution> 
    </aws:Country> 
    </aws:RankByCountry> 
</aws:TrafficData> 
</aws:Alexa> 
</aws:UrlInfoResult> 
</aws:Response> 
</aws:UrlInfoResponse> 
EOF; 

$sxe = new SimpleXMLElement($xml, null, false, 'http://awis.amazonaws.com/doc/2005-07-11'); 
foreach($sxe->xpath('//*[@Code]') as $node) { 
     if($node->getName() != 'Country') continue; 
     echo $node->attributes()->Code . "\n"; 
} 

?> 
+0

不适合我,因为$ XML不返回的属性。如何读取它来遍历xml文件以获取标签和属性..我的解决方案只是获取标签。你的解决方案对我无能为力。 – justanotherdeveloper 2012-03-13 23:53:01

+0

我已经更新了我的答案,这有帮助吗? – Martin 2012-03-14 02:10:26

+0

谢谢你的作品..当我尝试它只是你发送它没有..现在它完美的作品。 – justanotherdeveloper 2012-03-14 03:07:23