Now I am treating each order of elements separately as their own objects. This is much faster, if I can figure out how to append the results correctly.
function parseXml(xml) { $(xml).find('sites').each(function(){ PARENT = $(this); var PARENTarr = jQuery.makeArray($(this).children($(this).attr ('id'))); var CHILDRENarr = jQuery.makeArray($(PARENTarr).children($(this).attr ('label'))); var CHILDSarr = jQuery.makeArray($(CHILDRENarr).children($(this).attr ('label'))); alert (PARENTarr.length + " "+ CHILDRENarr.length +" "+ CHILDSarr.length); var PARENTobjs = {thisPARENT: $(PARENTarr).each(function(i){ var PARENTid = $(PARENTarr[i]).attr('id'); alert(PARENTid); }) } var CHILDRENobjs = {thisCHILDREN: $(CHILDRENarr).each(function(n){ var CHILDRENlabel = $(CHILDRENarr[n]).attr('label'); alert(CHILDRENlabel); }) } var CHILDSobjs = {thisCHILD:$(CHILDSarr).each(function(p){ var CHILDSlabel = $(CHILDSarr[p]).attr('label'); var CHILDStext = $(CHILDSarr[p]).text(); alert(CHILDSlabel + ": " + CHILDStext); }) } }); }