Jump to content

XML to Unordered List using SimpleXML


beingalex

Recommended Posts

I am trying to create a valid unordered list from an xml document. The XML could have unlimited nested nodes so I have created a recusive function (below). However, the function is creating <ul> and <li> tags where it shouldn't, ie. there are two at the start. It will be easier to understand the problem if I provide to you the code...

 

The XML:

<?xml version="1.0" encoding="UTF-8"?>
<navigation>
<links>
	<link>Main Link 1</link>
	<links>
		<link href="#">Main Link 1 - Sub Link 1</link>
		<link href="#">Main Link 1 - Sub Link 2</link>
		<link href="#">Main Link 1 - Sub Link 3</link>
	</links>	
</links>
<links>
	<link href="#">Main Link 2</link>
	<links>
		<link href="#">Main Link 2 - Sub Link 1</link>
		<link href="#">Main Link 2 - Sub Link 2</link>
	</links>	
</links>
<links>		
	<link href="#">Main Link 3</link>
	<links>
		<link href="#">Main Link 3 - Sub Link 1</link>
		<link href="#">Main Link 3 - Sub Link 2</link>
		<link href="#">Main Link 3 - Sub Link 3</link>
	</links>
</links>
<links>	
	<link href="#">Main Link 4</link>
	<links>
		<link href="#">Main Link 4 > Sub Link 1</link>
		<link href="#">Main Link 4 > Sub Link 2</link>
		<links>
			<link href="#">Main Link 4 - Sub Link 2 - Sub Sub Link 1</link>
			<link href="#">Main Link 4 - Sub Link 2 - Sub Sub Link 1</link>
		</links>
		<link href="#">Main Link 4 - Sub Link 3</link>
	</links>
</links>	
<link href="#">Main Link 5</link>
<link href="#">Main Link 6</link>
</navigation>

 

The function:

$xml = new SimpleXMLElement(file_get_contents($xmlfile));

buildNav($xml);

function buildNav($xml) 
{

echo "<ul>";

foreach($xml AS $links) {
	    
	echo "<li>" . $links;

	if (count($links->children()) > 0) {

		buildNav($links->children());
	}

	echo "</li>";

}

echo "</ul>";

}

 

The result should be:

<ul>
<li>Main Link 1
	<ul>
		<li>Main Link 1 - Sub Link 1</li>
		<li>Main Link 1 - Sub Link 2</li>
		<li>Main Link 1 - Sub Link 3</li>
	</ul>
</li>
<li>Main Link 2
	<ul>
		<li>Main Link 2 - Sub Link 1</li>
		<li>Main Link 2 - Sub Link 2</li>
	</ul>
</li>
etc..etc..
<li>Main Link 5</li>
<li>Main Link 6</li>
</ul>

 

Actual result...

<ul>
<li>
	<ul>
		<li>Main Link 1</li>
		<li>
			<ul>
				<li>Main Link 1 - Sub Link 1</li>
				<li>Main Link 1 - Sub Link 2</li>
etc..etc..

 

Notice the extra ul and li tags.

 

If anyone has any idea why this is happening or how to fix it then your help is MUCH appreciated.

 

Thanks in advance,

 

- Alex

Link to comment
https://forums.phpfreaks.com/topic/197078-xml-to-unordered-list-using-simplexml/
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.