атрибут получения строки php xml использует пространство имен - PullRequest
0 голосов
/ 14 марта 2012

У меня есть следующий XML-файл, который использует пространства имен.

Когда я использую следующую функцию php, она не возвращает атрибуты для aws: Код страны

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

Так что мне было интересно. Как я могу извлечь атрибут кода страны? Нужно ли создавать специальную функцию? Ниже приведена строка, возвращающая вызов curl.

<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 Ответ

1 голос
/ 14 марта 2012
<?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";
}

?>
...