I spent a couple days looking all over the web for how to do this well. I did some picking and choosing of methods, and I came up with this. It works best in Safari, then FireFox, and then Chrome. I have not tested in IE (do I have to?). It runs up to just over 20,000 lines of XML well, over that memory is working too hard.
It is a very linear parser that descends from parent to child nodes as it goes. I commented my code heavily so that it should be pretty understandable. The one place that I could be a bit more efficient is in the processing of the node attributes at each level. I would like to parse out node attributes without specifying them (label and id are pretty acceptable I guess), so any suggestions there would be great. :::::The FrameWork:::::: jquery-1.4.min.js :::::The code:::: $(function(){ $.ajax({ type: "GET", url: "sites.xml", dataType: "xml", success: parseXml }); function parseXml(xml) { //get root element // $(xml).find('sites').each(function(){ //get descentdent element = "<element></element" // $(this).find('>element').each(function(){ //set variable as this item to pass to the next function // var PARENT = $(this); //get a bunch of attributes of the PARENT element. THIS COULD BE MORE EFFICIENT // parentLabel = $(this).attr('label'); parentID = $(this).attr('id'); siteLAT = $(this).attr('lat'); siteLNG = $(this).attr('lng'); //set variable as string of PARENT variables// var parentBLOCK = "<br/>" +parentLabel +" " + parentID + "<br/>"; //set variable to post parentBLOCK// var siteBLOCK = $("div").append(parentBLOCK); //get descentdent element of PARENT // $(PARENT).find('>element').each(function(){ //set variable as this item to pass to the next function // var THISis = $(this); //get attributes of the THISis element. THIS COULD BE MORE EFFICIENT // thisLabel = $(this).attr('label'); //set variable as string of THISis variables// var thisBLOCK = thisLabel +": Has this latitude "+ siteLAT +" & this Longitude "+siteLNG; //set variable to post thisBLOCK// siteBLOCK = $("div").append(thisBLOCK + "<br/>"); //get descentdent element = THISis// $(THISis).find('>element').each(function(){ //get a bunch of attributes of the child elements. THIS COULD BE MORE EFFICIENT // childLabel = $(this).attr('label'); //get text from nodes of THISis chlidren elements // childCopy = $(this).text(); //set variable as string of THISis child variables// var childBLOCK = childLabel + ": " + childCopy + "<br/>"; //set variable to post childBLOCK// siteBLOCK = $("div").append(childBLOCK); }); }); }); }); } }); :::::The XML:::: <?xml version="1.0" encoding="UTF-8"?> <sites> <element label="site" id="1" lat="66" lng="104"> <element label="Location"> <element label="city">SF</element> <element label="state">CA</element> <element label="region">West Coast</element> </element> </element> <element label="site" id="2" lat="27" lng="305"> <element label="Location"> <element label="city">Las Vegas</element> <element label="state">NV</element> <element label="region">West</element> </element> </element> <element label="site" id="3" lat="106" lng="35"> <element label="Location"> <element label="city">Pittsburgh</element> <element label="state">Penn</element> <element label="region">North East</element> </element> </element> <element label="site" id="4" lat="77" lng="77"> <element label="Location"> <element label="city">Toledo</element> <element label="state">Ohio</element> <element label="region">North Mid</element> </element> </element> </sites>