2013-02-04 58 views
2

我试图解析使用SimpleXML的XML文件,但我一直运行到的问题(你要知道我是一个PHP小白)的SimpleXML:解析XML只输出的元素属性

这是结构XML文件的..(用于可读性命名约定。)

<World> 
    <Continent Name="North America" Status="" > 
    <Country Name="United States of America" Status=""> 
    <City Name="New York" Status="" /> 
    <City Name="Chicago" Status="" /> 
    </Country> 
    </Continent> 
</World> 

所有数据设置为属性(不是我的决定。)我需要能够输出每一项的name属性,以及告知状态的第二个属性。 “大洲”将是独一无二的,但每个“大陆”都可以有多个“国家”和“城市”。

这是我目前拥有的PHP ...

<?php 
     $xml_file = '/path'; 
     $xml = simplexml_load_file($xml_file); 

     foreach($xml->Continent as $continent) { 
      echo "<div class='continent'>".$continent['Name']."<span class='status'>".$continent['Status']."</span></div>"; 
      echo "<div class='country'>".$continent->Country['Name']."<span class='status'>".$continent->Country['Status']."</span></div>"; 
      echo "<div class='city'>".$continent->Country->City['Name']."<span class='status'>".$continent->Country->City['Status']."</span></div>"; 
     } 

?> 

我怎样才能避免重复自己,并利用水平将会级 - >?我以为我可以使用xpath,但是我开始艰难。另外,我怎样才能确保所有的城市都显示出来,而不仅仅是第一个?

+1

需要三个嵌套的'foreach'的:(1)'的foreach Continent',(2)'的foreach Country',和( 3)“foreach城市”。通过这种方式,您可以覆盖您的xml文档中的其他内容 – Oerd

+0

我想到了这一点,也许我完全是在捣乱它,但是当我嵌套了foreach时,它会返回所有正确的Continent名称,但随后每个Continent都会返回这些国家/地区的第一个大陆。 (即北美:美国,加拿大|南美:美国,加拿大|非洲:美国,加拿大)等。 – Harlow

+0

给我第二个 – Oerd

回答

1

你很可能不是 “骑自行车” 的国家和城市:

<?php 
    $xml_file = '/path'; 
    $xml = simplexml_load_file($xml_file); 

    foreach($xml->Continent as $continent) { 
     echo "<div class='continent'>".$continent['Name']."<span class='status'>".$continent['Status']."</span>"; 
     foreach($continent->Country as $country) { 
      echo "<div class='country'>".$country['Name']."<span class='status'>".$country['Status']."</span>"; 
      foreach($country->City as $city) { 
       echo "<div class='city'>".$city['Name']."<span class='status'>".$city['Status']."</span></div>"; 
      } 
      echo "</div>"; // close Country div 
     } 
     echo "</div>"; // close Continent div 
    } 
?> 
+0

你打我也是这样,我打算输入一点不同,可能会是错误和更长,我从xPath的角度思考我认为,而不是从PHP的角度来看。 PHP不是我的母语..lol – Malachi

+0

刚刚看到周期的逻辑有点瑕疵:) – Oerd

+1

得爱PHP的“详细”... B) – Oerd