Я пытаюсь прочитать XML из файла и отобразить их, как дерево.Я использую PHP, и я хочу получить вывод, как показано ниже.Содержимое XML-файла выглядит следующим образом ...
<Categories>
<Category>
<Id>1</Id>
<Name>Parent 1</Name>
<ParentId>1</ParentId>
<ParentName>Parent 1</ParentName>
</Category>
<Category>
<Id>2</Id>
<Name>Child 1</Name>
<ParentId>1</ParentId>
<ParentName>Parent 1</ParentName>
</Category>
<Category>
<Id>3</Id>
<Name>Child 2</Name>
<ParentId>1</ParentId>
<ParentName>Parent 1</ParentName>
</Category>
<Category>
<Id>8</Id>
<Name>Grand Child 1 -1</Name>
<ParentId>2</ParentId>
<ParentName>Child 1</ParentName>
</Category>
<Category>
<Id>12</Id>
<Name>Parent 2</Name>
<ParentId>12</ParentId>
<ParentName>Parent 2</ParentName>
</Category>
<Category>
<Id>15</Id>
<Name>Child 2-1</Name>
<ParentId>12</ParentId>
<ParentName>Parent 2</ParentName>
</Category>
</Categories>
</CategoryList>
Я хочу прочитать этот XML-файл (я знаю, как его читать), но я не могу отформатировать его следующим образом ... Как бы я получитьвсе узлы, которые являются самыми старшими родителями и являются дочерними по отношению к этим родительским узлам (используя рекурсию или что-то еще)
<ul>
<li>Parent 1
<ul>
<li> Child 1
<ul>
<li>Grand Child 1 -1</li>
</ul>
</li>
<li> Child 2</li>
</ul>
</li>
<li>Parent 2
<ul>
<li>Child 2-1 </li>
</ul>
</li>
</ul>
Пожалуйста, любая помощь будет принята с благодарностью ....
Редактировать * То, что я сделал до сих пор ...
$xml= simplexml_load_string('myxmlstring');
get_categories($xml, 0);
function get_categories($xml, $id) {
if ($id==0)
$Categories = $xml->xpath('Categories/Category[ParentId=Id]');
else
$Categories = $xml->xpath('Categories/Category[ParentId='.$id.' and Id!='.$id.']');
echo '<ul id="catlist'.$id.'">';
foreach($Categories as $Category) {
echo "<li>ID: " . $Category->Id . "--Name: " . $Category->Name;
get_categories($xml, $Category->Id);
echo "</li>";
}
echo "</ul>";
}
Теперь я просто хочу подтвердить, что это оптимальное решение.или кто-то может прийти с лучшей идеей ...