I still can't find out how exactly DOM interface is parsing the xml. Here is my code:
$doc = DOMDocument::loadXML('<ul>
<li><a href="#">Item 1</a> </li>
<li>Item 2<ul>
<li>Item 2.1 <ul>
<li><a href="#">Item 2.1.1</a> </li>
<li><a href="#">Item 2.1.2</a> </li>
</ul></li>
<li><a href="#">Item 2.2</a> </li>
<li><a href="#">Item 2.2.1</a> </li>
<li><a href="#">Item 2.2.2</a> </li>
</ul></li>
<li>Item 3 <ul>
<li><a href="#">Item 3.1</a> </li>
</ul></li>
<li><a href="#">Item 5</a> <ul>
<li><a href="#">Item 5.1</a> </li>
<li><a href="#">Item 5.2</a> </li>
</ul></li>
</ul>');
$innerXML2 = '';
foreach ($doc->childNodes as $node) {
$innerXML2 .= $this->InnerXML($doc,$node);
}
/////////////////
function InnerXML($doc,$node) {
$innerXML = '';
foreach($node->childNodes as $child)
$innerXML .= $doc->saveXML($child);
return $innerXML;
}
It's looping only once, so the $innerXML will always return the entire content of the $doc. I want to return the childs like:
1. <li><a href="#">Item 1</a> </li>
2. <li>Item 2<ul> <li>Item 2.1 <ul> <li><a href="#">Item 2.1.1</a> </li> <li><a href="#">Item 2.1.2</a> </li></ul></li><li><a href="#">Item 2.2</a> </li><li><a href="#">Item 2.2.1</a> </li><li><a href="#">Item 2.2.2</a> </li></ul></li>
3. <li>Item 3 <ul> <li><a href="#">Item 3.1</a> </li> </ul></li>
4. <li><a href="#">Item 4</a> <ul> <li><a href="#">Item 4.1</a> </li> <li><a href="#">Item 4.2</a> </li></ul></li>
I don't mind using any xml object, just to return the list above.
Many Thanks!
Rocco