2011-08-13 9 views
1

XMLファイルを読み込むこのPHPスクリプトでは、ネストされたノードにアクセスするための内部ループはデータを返しません。PHPがネストされたノードを取得中

PHPスクリプト

<?php 
// load SimpleXML 
$nodes = new SimpleXMLElement('communities.xml', null, true); 

echo <<<EOF 
<table> 
     <tr> 
       <th>ID</th> 
       <th>Name</th> 
       <th>Top</th> 
       <th>Left</th> 
       <th>Width</th> 
       <th>Height</th> 
       <th>Urls</th> 
     </tr> 

EOF; 

foreach($nodes as $node) // loop through 
{ 

     echo "<tr>"; 
     echo "  <td>".$node['ID']."</td>"; 
     echo "   <td>".$node->NAME."</td>"; 
     echo "   <td>".$node->TOP."</td>"; 
     echo "   <td>".$node->LEFT."</td>"; 
     echo "   <td>".$node->WIDTH."</td>"; 
     echo "   <td>".$node->HEIGHT."</td>"; 
     echo "   <td>"; 

       $urls = $node->URLS; 

       /* $urls = $xml->xpath('/COMMUNITIES/COMMUNITY/URLS/URL'); */ 

       foreach($urls as $url) 
       { 

        echo ' '.$url->NAME; 
       } 

     echo '  </td>'; 

     echo '</tr>'; 

} 

echo '</table>'; 
?> 

XMLファイル

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<COMMUNITIES> 
<COMMUNITY ID="c001"> 
    <NAME>Town Services</NAME> 
    <TOP>50</TOP> 
    <LEFT>50</LEFT> 
    <WIDTH>200</WIDTH> 
    <HEIGHT>300</HEIGHT> 
    <URLS> 
     <URL ID="U001"> 
      <NAME>Google.com</NAME> 
      <URL>http://www.google.com</URL> 
     </URL> 
     <URL ID="U002"> 
      <NAME>Bing.com</NAME> 
      <URL>http://www.bing.com</URL> 
     </URL> 
     <URL ID="U003"> 
      <NAME>Yahoo.com</NAME> 
      <URL>http://www.yahoo.com</URL> 
     </URL> 
     <URL ID="U004"> 
      <NAME>Aol.com</NAME> 
      <URL>http://www.aol.com</URL> 
     </URL> 
    </URLS> 
    </COMMUNITY> 
<COMMUNITY ID="c002"> 
    <NAME>Local Stores</NAME> 
    <TOP>50</TOP> 
    <LEFT>260</LEFT> 
    <WIDTH>200</WIDTH> 
    <HEIGHT>150</HEIGHT> 
    <URLS> 
     <URL ID="U001"> 
      <NAME>Walgreens</NAME> 
      <URL>http://www.walgreens.com</URL> 
     </URL> 
     <URL ID="U002"> 
      <NAME>Bing.com</NAME> 
      <URL>http://www.bing.com</URL> 
     </URL> 
     <URL ID="U003"> 
      <NAME>Yahoo.com</NAME> 
      <URL>http://www.yahoo.com</URL> 
     </URL> 
    </URLS> 
    </COMMUNITY> 
<COMMUNITY ID="c003"> 
    <NAME>Attractions</NAME> 
    <TOP>50</TOP> 
    <LEFT>470</LEFT> 
    <WIDTH>200</WIDTH> 
    <HEIGHT>300</HEIGHT> 
    <URLS> 
     <URL ID="U001"> 
      <NAME>Museum</NAME> 
      <URL>http://www.mfa.org</URL> 
     </URL> 
     <URL ID="U002"> 
      <NAME>Park</NAME> 
      <URL>http://www.bing.com</URL> 
     </URL> 
    </URLS> 
    </COMMUNITY> 
<COMMUNITY ID="c004"> 
    <NAME>Online Stores</NAME> 
    <TOP>370</TOP> 
    <LEFT>50</LEFT> 
    <WIDTH>200</WIDTH> 
    <HEIGHT>150</HEIGHT> 
    <URLS> 
     <URL ID="U001"> 
      <NAME>Amazon.com</NAME> 
      <URL>http://www.amazon.com</URL> 
     </URL> 
     <URL ID="U002"> 
      <NAME>Target.com</NAME> 
      <URL>http://www.target.com</URL> 
     </URL> 
    </URLS> 
    </COMMUNITY> 
<COMMUNITY ID="c005"> 
    <NAME>Online Forums</NAME> 
    <TOP>370</TOP> 
    <LEFT>300</LEFT> 
    <WIDTH>200</WIDTH> 
    <HEIGHT>200</HEIGHT> 
    <URLS> 
     <URL ID="U001"> 
      <NAME>Technet</NAME> 
      <URL>http://www.Microsoft.com</URL> 
     </URL> 
     <URL ID="U002"> 
      <NAME>MSDN</NAME> 
      <URL>http://www.Microsoft.com</URL> 
     </URL> 
    </URLS> 
    </COMMUNITY> 
<COMMUNITY ID="c006"> 
    <NAME>Travel</NAME> 
    <TOP>370</TOP> 
    <LEFT>480</LEFT> 
    <WIDTH>200</WIDTH> 
    <HEIGHT>200</HEIGHT> 
    <URLS> 
     <URL ID="U001"> 
      <NAME>Southwest</NAME> 
      <URL>http://www.mfa.org</URL> 
     </URL> 
     <URL ID="U002"> 
      <NAME>Northwest</NAME> 
      <URL>http://www.bing.com</URL> 
     </URL> 
    </URLS> 
    </COMMUNITY> 
</COMMUNITIES> 

私はまた、XPathの持つ内部ノードにアクセスしようと、それがエラーを返しました。

$urls = $xml->xpath('/COMMUNITIES/COMMUNITY/URLS/URL'); 

内部ノードにアクセスする正しい方法は何ですか?ありがとう。

答えて

2

あなただけにそれを変更する必要があります。

foreach($urls->URL as $url) 
{ 
    echo ' '.$url->NAME; 
} 
+0

これは動作します。ありがとう! – user823527