simpleXML:解析XML以仅输出元素属性

时间:2013-02-04 22:05:27

标签: php xml xpath simplexml

我正在尝试使用simpleXML解析XML文件,但我一直遇到问题(请注意,我是一个PHP菜鸟。)

这是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>";
         }

?>

我怎样才能避免不得不重复自己并逐级使用 - &gt;?我以为我可以使用xpath,但我很难开始。另外,我如何确保所有城市都出现而不仅仅是第一个?

1 个答案:

答案 0 :(得分: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
    }
?>