bilsalak
04-15-2005, 07:46 AM
Posting this in the spirit of "2 heads are better than one" and hoping to see someone improve upon this. If it helps someone looking for an answer than that's even better..
The idea is to load and parse an xml file with an unknown number of <item> nodes and an unknown number of children to the <item> node which may or may not have any number of attributes. Currently I see 2 problems:
1. You must know the names of the attributes and nodes in the xml file, and reference them by name, this doesnt really allowyou to have an unknown number of cghildren to the <item> node, does it? I have an idea of how to fix this but haven't spent the time yet... it's possible to parse the attribute names and assign them to vars used to reference their values in the array...
2. Adding more than 1 child with the same name inside of an <item> node causes the original values to be overwritten when parsed.. trying to figure the best way to do this... might be cleaner if the solution comes from the server side creation of the xml file and duplicate names are avoided when creating the children of <item>.
//Import our external AS class
import BodyChart;
//Container for our data
BodyChart_arr = new Array();
//Load the XML
BodyChart_xml = new XML();
BodyChart_xml.ignoreWhite = true;
BodyChart_xml.onLoad = function ( success ) {
if ( success ) {
Process = new BodyChart();
var item_xml = BodyChart_xml.firstChild.firstChild;
//loop counter, will be used as an array reference later
var i:Number = 0;
//loop through our xml nodes until they're gone
while ( item_xml != null ) {
// put the data in a package
BodyChart_arr.push( Process.getBodyChartData( item_xml ) );
//testing vars
trace("Array " + i + " contains the following vars " + BodyChart_arr[i].trans_name + " " + BodyChart_arr[i].item_name + " " + BodyChart_arr[i].xray_date + " " + BodyChart_arr[i].xray_short + " " + BodyChart_arr[i].xray_attendee + " " + BodyChart_arr[i].xray + " " + BodyChart_arr[i].surgeries_date + " " + BodyChart_arr[i].surgeries_date + " " + BodyChart_arr[i].surgeries_short + " " + BodyChart_arr[i].surgeries_attendee + " " + BodyChart_arr[i].surgeries + " " + BodyChart_arr[i].diagnosis_date + " " + BodyChart_arr[i].diagnosis_short + " " + BodyChart_arr[i].diagnosis_attendee + " " + BodyChart_arr[i].diagnosis);
//increment our counter
i++;
//move to the next node in line
item_xml = item_xml.nextSibling;
}//end while
} else {
trace("Error loading XML data.");
}//end if
//cleanup after ourselves
delete BodyChart_xml;
}//end function
BodyChart_xml.load( "BodyChartExample.xml" );
stop();
class BodyChart {
function getBodyChartData( item_xml ) {
var BodyChartData = new Object();
var data_xml = new XML();
data_xml = item_xml.firstChild;
while (data_xml != null) {
BodyChartData[data_xml.nodeName] = data_xml.firstChild.nodeValue;
var x = data_xml.attributes;
for (var att in x) {
BodyChartData[att] = x[att];
}//end for
data_xml = data_xml.nextSibling;
}//end while
return BodyChartData;
}//end function
}// end class
<?xml version="1.0"?>
<bodychart>
<item>
<item_name trans_name="Right Foot"><![CDATA[RFoot]]></item_name>
<highlight_color><![CDATA[000000]]></highlight_color>
<xray xray_date="12-01-2005 15:02" xray_short="X-ray/MRI Findings/Relevant Info" xray_attendee="Dr. Smith"><![CDATA[<b>X-ray/MRI Findings/Relevant Info</b><br>Post emensos insuperabilis expeditionis eventus languentibus partium animis, quas periculorum varietas fregerat et laborum, nondum tubarum cessante clangore vel milite locato per stationes hibernas, fortunae saevientis procellae tempestates alias rebus infudere communibus per multa illa et dira facinora Caesaris Galli, qui ex squalore imo miseriarum in aetatis adultae primitiis ad principale culmen insperato saltu provectus ultra terminos potestatis delatae procurrens asperitate nimia cuncta foedabat. propinquitate enim regiae stirpis gentilitateque etiam tum Constantini nominis efferebatur in fastus, si plus valuisset, ausurus hostilia in auctorem suae felicitatis, ut videbatur.<br><br>]]></xray>
<surgeries surgeries_date="12-01-2005 15:55" surgeries_short="Surgeries" surgeries_attendee="Dr. Smith"><![CDATA[<b>Surgeries</b><br>Cuius acerbitati uxor grave accesserat incentivum, germanitate Augusti turgida supra modum, quam Hannibaliano regi fratris filio antehac Constantinus iunxerat pater, Megaera quaedam mortalis, inflammatrix saevientis adsidua, humani cruoris avida nihil mitius quam maritus; qui paulatim eruditiores facti processu temporis ad nocendum per clandestinos versutosque rumigerulos conpertis leviter addere quaedam male suetos falsa et placentia sibi discentes, adfectati regni vel artium nefandarum calumnias insontibus adfligebant.<br><br>]]></surgeries>
<diagnosis diagnosis_date="12-01-2005 17:12" diagnosis_short="Diagnosis" diagnosis_attendee="Dr. Smith"><![CDATA[<b>Diagnosis</b><br>eminuit autem inter humilia supergressa iam impotentia fines mediocrium delictorum nefanda Clematii cuiusdam Alexandrini nobilis mors repentina; cuius socrus cum misceri sibi generum, flagrans eius amore, non impetraret, ut ferebatur, per palatii pseudothyrum introducta, oblato pretioso reginae monili id adsecuta est, ut ad Honoratum tum comitem orientis formula missa letali omnino scelere nullo contactus idem Clematius nec hiscere nec loqui permissus occideretur.]]></diagnosis>
</item>
<item>
<item_name trans_name="Left Foot"><![CDATA[LFoot]]></item_name>
<highlight_color><![CDATA[FF0000]]></highlight_color>
<xray xray_date="01-25-2006 08:10" xray_short="X-ray/MRI Findings/Relevant Info" xray_attendee="Dr. Thompson"><![CDATA[<b>X-ray/MRI Findings/Relevant Info</b><br>Post emensos insuperabilis expeditionis eventus languentibus partium animis, quas periculorum varietas fregerat et laborum, nondum tubarum cessante clangore vel milite locato per stationes hibernas, fortunae saevientis procellae tempestates alias rebus infudere communibus per multa illa et dira facinora Caesaris Galli, qui ex squalore imo miseriarum in aetatis adultae primitiis ad principale culmen insperato saltu provectus ultra terminos potestatis delatae procurrens asperitate nimia cuncta foedabat. propinquitate enim regiae stirpis gentilitateque etiam tum Constantini nominis efferebatur in fastus, si plus valuisset, ausurus hostilia in auctorem suae felicitatis, ut videbatur.<br><br>]]></xray>
<surgeries surgeries_date="01-25-2006 08:50" surgeries_short="Surgeries" surgeries_attendee="Dr. Thompson"><![CDATA[<b>Surgeries</b><br>Cuius acerbitati uxor grave accesserat incentivum, germanitate Augusti turgida supra modum, quam Hannibaliano regi fratris filio antehac Constantinus iunxerat pater, Megaera quaedam mortalis, inflammatrix saevientis adsidua, humani cruoris avida nihil mitius quam maritus; qui paulatim eruditiores facti processu temporis ad nocendum per clandestinos versutosque rumigerulos conpertis leviter addere quaedam male suetos falsa et placentia sibi discentes, adfectati regni vel artium nefandarum calumnias insontibus adfligebant.<br><br>]]></surgeries>
<diagnosis diagnosis_date="01-25-2006 09:01" diagnosis_short="Diagnosis" diagnosis_attendee="Dr. Thompson"><![CDATA[<b>Diagnosis</b><br>eminuit autem inter humilia supergressa iam impotentia fines mediocrium delictorum nefanda Clematii cuiusdam Alexandrini nobilis mors repentina; cuius socrus cum misceri sibi generum, flagrans eius amore, non impetraret, ut ferebatur, per palatii pseudothyrum introducta, oblato pretioso reginae monili id adsecuta est, ut ad Honoratum tum comitem orientis formula missa letali omnino scelere nullo contactus idem Clematius nec hiscere nec loqui permissus occideretur.]]></diagnosis>
</item>
</bodychart>
Let me know if you come up with an improvement or fix for the known rough spots... feel free to use any or all of this for your project if it helps you.
Thanks,
Bill
The idea is to load and parse an xml file with an unknown number of <item> nodes and an unknown number of children to the <item> node which may or may not have any number of attributes. Currently I see 2 problems:
1. You must know the names of the attributes and nodes in the xml file, and reference them by name, this doesnt really allowyou to have an unknown number of cghildren to the <item> node, does it? I have an idea of how to fix this but haven't spent the time yet... it's possible to parse the attribute names and assign them to vars used to reference their values in the array...
2. Adding more than 1 child with the same name inside of an <item> node causes the original values to be overwritten when parsed.. trying to figure the best way to do this... might be cleaner if the solution comes from the server side creation of the xml file and duplicate names are avoided when creating the children of <item>.
//Import our external AS class
import BodyChart;
//Container for our data
BodyChart_arr = new Array();
//Load the XML
BodyChart_xml = new XML();
BodyChart_xml.ignoreWhite = true;
BodyChart_xml.onLoad = function ( success ) {
if ( success ) {
Process = new BodyChart();
var item_xml = BodyChart_xml.firstChild.firstChild;
//loop counter, will be used as an array reference later
var i:Number = 0;
//loop through our xml nodes until they're gone
while ( item_xml != null ) {
// put the data in a package
BodyChart_arr.push( Process.getBodyChartData( item_xml ) );
//testing vars
trace("Array " + i + " contains the following vars " + BodyChart_arr[i].trans_name + " " + BodyChart_arr[i].item_name + " " + BodyChart_arr[i].xray_date + " " + BodyChart_arr[i].xray_short + " " + BodyChart_arr[i].xray_attendee + " " + BodyChart_arr[i].xray + " " + BodyChart_arr[i].surgeries_date + " " + BodyChart_arr[i].surgeries_date + " " + BodyChart_arr[i].surgeries_short + " " + BodyChart_arr[i].surgeries_attendee + " " + BodyChart_arr[i].surgeries + " " + BodyChart_arr[i].diagnosis_date + " " + BodyChart_arr[i].diagnosis_short + " " + BodyChart_arr[i].diagnosis_attendee + " " + BodyChart_arr[i].diagnosis);
//increment our counter
i++;
//move to the next node in line
item_xml = item_xml.nextSibling;
}//end while
} else {
trace("Error loading XML data.");
}//end if
//cleanup after ourselves
delete BodyChart_xml;
}//end function
BodyChart_xml.load( "BodyChartExample.xml" );
stop();
class BodyChart {
function getBodyChartData( item_xml ) {
var BodyChartData = new Object();
var data_xml = new XML();
data_xml = item_xml.firstChild;
while (data_xml != null) {
BodyChartData[data_xml.nodeName] = data_xml.firstChild.nodeValue;
var x = data_xml.attributes;
for (var att in x) {
BodyChartData[att] = x[att];
}//end for
data_xml = data_xml.nextSibling;
}//end while
return BodyChartData;
}//end function
}// end class
<?xml version="1.0"?>
<bodychart>
<item>
<item_name trans_name="Right Foot"><![CDATA[RFoot]]></item_name>
<highlight_color><![CDATA[000000]]></highlight_color>
<xray xray_date="12-01-2005 15:02" xray_short="X-ray/MRI Findings/Relevant Info" xray_attendee="Dr. Smith"><![CDATA[<b>X-ray/MRI Findings/Relevant Info</b><br>Post emensos insuperabilis expeditionis eventus languentibus partium animis, quas periculorum varietas fregerat et laborum, nondum tubarum cessante clangore vel milite locato per stationes hibernas, fortunae saevientis procellae tempestates alias rebus infudere communibus per multa illa et dira facinora Caesaris Galli, qui ex squalore imo miseriarum in aetatis adultae primitiis ad principale culmen insperato saltu provectus ultra terminos potestatis delatae procurrens asperitate nimia cuncta foedabat. propinquitate enim regiae stirpis gentilitateque etiam tum Constantini nominis efferebatur in fastus, si plus valuisset, ausurus hostilia in auctorem suae felicitatis, ut videbatur.<br><br>]]></xray>
<surgeries surgeries_date="12-01-2005 15:55" surgeries_short="Surgeries" surgeries_attendee="Dr. Smith"><![CDATA[<b>Surgeries</b><br>Cuius acerbitati uxor grave accesserat incentivum, germanitate Augusti turgida supra modum, quam Hannibaliano regi fratris filio antehac Constantinus iunxerat pater, Megaera quaedam mortalis, inflammatrix saevientis adsidua, humani cruoris avida nihil mitius quam maritus; qui paulatim eruditiores facti processu temporis ad nocendum per clandestinos versutosque rumigerulos conpertis leviter addere quaedam male suetos falsa et placentia sibi discentes, adfectati regni vel artium nefandarum calumnias insontibus adfligebant.<br><br>]]></surgeries>
<diagnosis diagnosis_date="12-01-2005 17:12" diagnosis_short="Diagnosis" diagnosis_attendee="Dr. Smith"><![CDATA[<b>Diagnosis</b><br>eminuit autem inter humilia supergressa iam impotentia fines mediocrium delictorum nefanda Clematii cuiusdam Alexandrini nobilis mors repentina; cuius socrus cum misceri sibi generum, flagrans eius amore, non impetraret, ut ferebatur, per palatii pseudothyrum introducta, oblato pretioso reginae monili id adsecuta est, ut ad Honoratum tum comitem orientis formula missa letali omnino scelere nullo contactus idem Clematius nec hiscere nec loqui permissus occideretur.]]></diagnosis>
</item>
<item>
<item_name trans_name="Left Foot"><![CDATA[LFoot]]></item_name>
<highlight_color><![CDATA[FF0000]]></highlight_color>
<xray xray_date="01-25-2006 08:10" xray_short="X-ray/MRI Findings/Relevant Info" xray_attendee="Dr. Thompson"><![CDATA[<b>X-ray/MRI Findings/Relevant Info</b><br>Post emensos insuperabilis expeditionis eventus languentibus partium animis, quas periculorum varietas fregerat et laborum, nondum tubarum cessante clangore vel milite locato per stationes hibernas, fortunae saevientis procellae tempestates alias rebus infudere communibus per multa illa et dira facinora Caesaris Galli, qui ex squalore imo miseriarum in aetatis adultae primitiis ad principale culmen insperato saltu provectus ultra terminos potestatis delatae procurrens asperitate nimia cuncta foedabat. propinquitate enim regiae stirpis gentilitateque etiam tum Constantini nominis efferebatur in fastus, si plus valuisset, ausurus hostilia in auctorem suae felicitatis, ut videbatur.<br><br>]]></xray>
<surgeries surgeries_date="01-25-2006 08:50" surgeries_short="Surgeries" surgeries_attendee="Dr. Thompson"><![CDATA[<b>Surgeries</b><br>Cuius acerbitati uxor grave accesserat incentivum, germanitate Augusti turgida supra modum, quam Hannibaliano regi fratris filio antehac Constantinus iunxerat pater, Megaera quaedam mortalis, inflammatrix saevientis adsidua, humani cruoris avida nihil mitius quam maritus; qui paulatim eruditiores facti processu temporis ad nocendum per clandestinos versutosque rumigerulos conpertis leviter addere quaedam male suetos falsa et placentia sibi discentes, adfectati regni vel artium nefandarum calumnias insontibus adfligebant.<br><br>]]></surgeries>
<diagnosis diagnosis_date="01-25-2006 09:01" diagnosis_short="Diagnosis" diagnosis_attendee="Dr. Thompson"><![CDATA[<b>Diagnosis</b><br>eminuit autem inter humilia supergressa iam impotentia fines mediocrium delictorum nefanda Clematii cuiusdam Alexandrini nobilis mors repentina; cuius socrus cum misceri sibi generum, flagrans eius amore, non impetraret, ut ferebatur, per palatii pseudothyrum introducta, oblato pretioso reginae monili id adsecuta est, ut ad Honoratum tum comitem orientis formula missa letali omnino scelere nullo contactus idem Clematius nec hiscere nec loqui permissus occideretur.]]></diagnosis>
</item>
</bodychart>
Let me know if you come up with an improvement or fix for the known rough spots... feel free to use any or all of this for your project if it helps you.
Thanks,
Bill