I am trying to restructure some xml data into objects in a way where I can access the data more like I would using E4X. Just trying to simplify and abstract the way I organize it. What I’m having problems with is that when I return an XMLNode.attributes property object it is adding a new property/subobject to the new and even the original data with NaN or undefined names and values. I even duplicated the XML Object and can’t figure out why it would be picking up the new values. I’m stumped here.
Here is my original xml:
<?xml version='1.0' encoding='ISO-8859-1'?>
<Root>
<Settings Editable="yes" DefaultCategory="0" DefaultPlatform="mac" projectName="WB Wizard" >0</Settings>
<Channels>
<Channel Disabled="no" Content="1" Pref="0" Store="0" Share="0" Icon="0" Name="Business" ID="0" >0</Channel>
<Channel Disabled="no" Content="1" Pref="0" Store="0" Share="0" Icon="0" Name="Nutrition" ID="1" >0</Channel>
</Channels>
<Movies>
<Movie folderPath="default" urlPath="22" ID="1" >0</Movie>
<Movie folderPath="default" urlPath="14" ID="2" >0</Movie>
</Movies>
<Categories>
<Category Name="Default">
<c >0</c>
<c >1</c>
</Category>
<Category Name="Medical">
<c >0</c>
<c >1</c>
</Category>
<Category Name="Corporate">
<c >0</c>
<c >1</c>
</Category>
</Categories>
</Root>
here is my ActionScript pertaining to it:
//setup for loading data from xml db
var docDataPath:String = "data.xml";
var docData1:XML = new XML();
docData1.ignoreWhite = true;
var docDataCon = new XMLSocket();
var docData1;
var attribVar1;
docData1.load(docDataPath);
dataOM = new Object();
//function for organizing xml data into AS OM (translator)
docData1.onLoad = function() {
docData = docData1;
docDataCon = docData;
//trace(docData+"
");
for (i=0; i<docData.firstChild.childNodes.length; i++) {
var childNameVar1:String = docData.firstChild.childNodes*.nodeName;
dataOM[childNameVar1] = docData.firstChild.childNodes*.attributes;
trace(docData1.firstChild.childNodes*.nodeName+" is "+docData1.firstChild.childNodes*+"
");
if (docData.firstChild.childNodes*.hasChildNodes()) {
for (n=0; n<docData.firstChild.childNodes*.childNodes.length; n++) {
objectVar1 = dataOM[childNameVar1];
childNameVar2 = this[docData.firstChild.childNodes*.childNodes[n].nodeName];
objectVar1[childNameVar2+n] = docData.firstChild.childNodes*.childNodes[n].attributes;
if (docData.firstChild.childNodes*.childNodes[n].hasChildNodes()) {
for (v=0; v<docData.firstChild.childNodes*.childNodes[n].childNodes.length; v++) {
objectVar2 = objectVar1[childNameVar2+n];
childNameVar3 = this[docData.firstChild.childNodes*.childNodes[n].childNodes[v].nodeName];
objectVar2[childNameVar3] = docData.firstChild.childNodes*.childNodes[n].childNodes[v].nodeValue;
}
}
}
}
trace(docData1.firstChild.childNodes*.nodeName+" is "+docData1.firstChild.childNodes*+"
");
}
};
and here is what I get out:
<?xml version='1.0' encoding='ISO-8859-1'?>
<Root>
<Settings NaN="[type Object]" Editable="yes" DefaultCategory="0"
DefaultPlatform="mac" projectName="WB Wizard">0</Settings>
<Channels NaN="[type Object]">
<Channel undefined="0" Disabled="no" Content="1" Pref="0"
Store="0" Share="0" Icon="0" Name="Business" ID="0">0</Channel>
<Channel undefined="0" Disabled="no" Content="1" Pref="0"
Store="0" Share="0" Icon="0" Name="Nutrition" ID="1">0</Channel>
</Channels>
<Movies NaN="[type Object]">
<Movie undefined="0" folderPath="default" urlPath="22" ID="1">0
</Movie>
<Movie undefined="0" folderPath="default" urlPath="14" ID="2">0
</Movie>
</Movies>
<Categories NaN="[type Object]">
<Category undefined="null" Name="Default">
<c>0</c>
<c>1</c>
</Category>
<Category undefined="null" Name="Medical">
<c>0</c>
<c>1</c>
</Category>
<Category undefined="null" Name="Corporate">
<c>0</c>
<c>1</c>
</Category>
</Categories>
</Root>
Sorry I’ve been doing some crappy debugging and I’m sure the code is messy in a few places but I’m really just going nuts trying to figure out how to avoid this core problem.
Seriously, any help as to a way around this would be amazing.