2012-03-13 5 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

+0

私は自分の答えを更新しました。それは助けになりますか? – Martin

+0

ありがとうございました。あなたが送ったものだけで試してみましたが、それは完全に機能しています。 – justanotherdeveloper

関連する問題