Я пытаюсь проанализировать XML-файл с помощью simpleXML, но я постоянно сталкиваюсь с проблемами (помните, что я PHP noob).
Это структура 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>
Все данные задаются как атрибуты (а не мое решение.) Мне нужно иметь возможность выводить атрибут имени каждого из них, а также второй атрибут, который сообщает о статусе. «Континенты» будут уникальными, но каждому «континенту» разрешено иметь несколько «стран» и «городов».
Это 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, но мне было очень сложно начать работу. Кроме того, как я могу убедиться, что все города появятся, а не только первый?
Вероятно, вы не «едете на велосипеде» по странам и городам:
<?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 } ?>