Note that there are some explanatory texts on larger screens.

plurals
  1. POPHP XML - How to build a tree of xml nodes that are at at same level with parent child relationship
    primarykey
    data
    text
    <p>I am trying to read the xml from a file and display them just like a tree. I am using PHP and I want to get the output as shown below. The content of xml file is as follows... </p> <pre><code>&lt;Categories&gt; &lt;Category&gt; &lt;Id&gt;1&lt;/Id&gt; &lt;Name&gt;Parent 1&lt;/Name&gt; &lt;ParentId&gt;1&lt;/ParentId&gt; &lt;ParentName&gt;Parent 1&lt;/ParentName&gt; &lt;/Category&gt; &lt;Category&gt; &lt;Id&gt;2&lt;/Id&gt; &lt;Name&gt;Child 1&lt;/Name&gt; &lt;ParentId&gt;1&lt;/ParentId&gt; &lt;ParentName&gt;Parent 1&lt;/ParentName&gt; &lt;/Category&gt; &lt;Category&gt; &lt;Id&gt;3&lt;/Id&gt; &lt;Name&gt;Child 2&lt;/Name&gt; &lt;ParentId&gt;1&lt;/ParentId&gt; &lt;ParentName&gt;Parent 1&lt;/ParentName&gt; &lt;/Category&gt; &lt;Category&gt; &lt;Id&gt;8&lt;/Id&gt; &lt;Name&gt;Grand Child 1 -1&lt;/Name&gt; &lt;ParentId&gt;2&lt;/ParentId&gt; &lt;ParentName&gt;Child 1&lt;/ParentName&gt; &lt;/Category&gt; &lt;Category&gt; &lt;Id&gt;12&lt;/Id&gt; &lt;Name&gt;Parent 2&lt;/Name&gt; &lt;ParentId&gt;12&lt;/ParentId&gt; &lt;ParentName&gt;Parent 2&lt;/ParentName&gt; &lt;/Category&gt; &lt;Category&gt; &lt;Id&gt;15&lt;/Id&gt; &lt;Name&gt;Child 2-1&lt;/Name&gt; &lt;ParentId&gt;12&lt;/ParentId&gt; &lt;ParentName&gt;Parent 2&lt;/ParentName&gt; &lt;/Category&gt; &lt;/Categories&gt; &lt;/CategoryList&gt; </code></pre> <p>I want to read this xml file (I know how to read it) But I can not format it like follows... How would I get all the nodes that are the top most parents and get child of those parent nodes (using recursion or what so ever)</p> <pre><code>&lt;ul&gt; &lt;li&gt;Parent 1 &lt;ul&gt; &lt;li&gt; Child 1 &lt;ul&gt; &lt;li&gt;Grand Child 1 -1&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt; Child 2&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;Parent 2 &lt;ul&gt; &lt;li&gt;Child 2-1 &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; </code></pre> <p>Please any help will be greatly appreciated....</p> <p><strong>Edit*</strong> What I have done so far...</p> <pre><code>$xml= simplexml_load_string('myxmlstring'); get_categories($xml, 0); function get_categories($xml, $id) { if ($id==0) $Categories = $xml-&gt;xpath('Categories/Category[ParentId=Id]'); else $Categories = $xml-&gt;xpath('Categories/Category[ParentId='.$id.' and Id!='.$id.']'); echo '&lt;ul id="catlist'.$id.'"&gt;'; foreach($Categories as $Category) { echo "&lt;li&gt;ID: " . $Category-&gt;Id . "--Name: " . $Category-&gt;Name; get_categories($xml, $Category-&gt;Id); echo "&lt;/li&gt;"; } echo "&lt;/ul&gt;"; } </code></pre> <p>Now I just want to confirm that this is the optimal solution. or someone can come with better idea...</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload