I have some xml from a webservice that I would like to parse and create a nested unordered list so that I can style using CSS to make it look like a treeview. The xml is like below:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfNavMenuItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
<NavMenuItem>
<DOMAIN_USERNAME>SomeUser</DOMAIN_USERNAME>
<PRIMARY_FOLDER>XYZ HR EMP SELF SERVICE</PRIMARY_FOLDER>
<MENU_DISPLAY_NAME>Accommodation Request</MENU_DISPLAY_NAME>
</NavMenuItem>
<NavMenuItem>
<DOMAIN_USERNAME>SomeUser</DOMAIN_USERNAME>
<PRIMARY_FOLDER>XYZ HR EMP SELF SERVICE</PRIMARY_FOLDER>
<MENU_DISPLAY_NAME>Additional Personal Information</MENU_DISPLAY_NAME>
</NavMenuItem>
<NavMenuItem>
<DOMAIN_USERNAME>SomeUser</DOMAIN_USERNAME>
<PRIMARY_FOLDER>XYZ HR EMP SELF SERVICE</PRIMARY_FOLDER>
<MENU_DISPLAY_NAME>All Actions Awaiting Your Attention</MENU_DISPLAY_NAME>
</NavMenuItem>
<NavMenuItem>
<DOMAIN_USERNAME>SomeUser</DOMAIN_USERNAME>
<PRIMARY_FOLDER>XYZ CORP HR TIME SELF SERVICE</PRIMARY_FOLDER>
<SECONDARY_FOLDER>Time</SECONDARY_FOLDER>
<MENU_DISPLAY_NAME>Create Timecard</MENU_DISPLAY_NAME>
</NavMenuItem>
<NavMenuItem>
<DOMAIN_USERNAME>SomeUser</DOMAIN_USERNAME>
<PRIMARY_FOLDER>XYZ CORP HR TIME SELF SERVICE</PRIMARY_FOLDER>
<SECONDARY_FOLDER>Time</SECONDARY_FOLDER>
<MENU_DISPLAY_NAME>Recent Timecards</MENU_DISPLAY_NAME>
</NavMenuItem>
<NavMenuItem>
<DOMAIN_USERNAME>SomeUser</DOMAIN_USERNAME>
<PRIMARY_FOLDER>XYZ CORP HR TIME SELF SERVICE</PRIMARY_FOLDER>
<SECONDARY_FOLDER>Time</SECONDARY_FOLDER>
<MENU_DISPLAY_NAME>Timecard Search</MENU_DISPLAY_NAME>
</NavMenuItem>
</ArrayOfNavMenuItem>
and my poor man's attempt at jQuery is so far. I am not sure how I can capture primary folder, secondary folder structure before I iterate over each nav item and add them to <li></li>
inside of the appropriate folders
//AJAX CALL
$(response).find('NavMenuItem').each(function (index) {
var test = ($(this).find('SECONDARY_FOLDER').length > 0) ? '<ul><li><label for="subfolder' + index +'">' + $(this).find("SECONDARY_FOLDER").text() + '</label><input type="checkbox" id="subfolder' + index + '">' : '';
$('.SearchResults').append('<ul class="tree"><li><label for="folder' + index + '">' + $(this).find("PRIMARY_FOLDER").text() + '</label>'
+ '<input type="checkbox" checked id="folder' + index + '" />'
+ test
+ '<ul><li class="file"><a href="#">' + $(this).find("MENU_DISPLAY_NAME").text() + '</a></li></ul>'
+ '</li></ul>');
});
But my desired HTML output is something like this:
<ul class="tree">
<li>
<label for="folder1">XYZ CORP HR TIME SELF SERVICE </label>
<input type="checkbox" checked id="folder1" />
<ul>
<li><label for="subfolder1">Time</label> <input type="checkbox" id="subfolder1" />
<ul>
<li class="file"><a href="#" target="_tab">Create Timecard</a></li>
<li class="file"><a href="#" target="_tab">Recent Timecards</a></li>
<li class="file"><a href="#" target="_tab">Timecard Search</a></li>
</ul>
</li>
</ul>
</li>
<li>
<label for="folder2">XYZ HR EMP SELF SERVICE</label> <input type="checkbox" id="folder2" />
<ul>
<li class="file"><a href="#" target="_tab">Accommodation Request</a></li>
<li class="file"><a href="#" target="_tab">Additional Personal Information</a></li>
<li class="file"><a href="#" target="_tab">All Actions Awaiting Your Attention</a></li>
</ul>
</li>
</ul>