To recusively dump your complex object you might use:
function traceProperties(object : Object, depth : uint = 0) : void {
for (var prop : String in object) {
trace (prefix(depth), prop, object[prop]);
if (object[prop] is Object) traceProperties(object[prop], depth + 1);
}
function prefix(depth : uint) : String {
var prefix : String = "";
for (var i : uint = 0; i < depth; i++) prefix += "....";
return prefix;
}
}
Anyway, there is also an error in createProperties. Look at the attached
test file to compare with my fixes. Hope the list allows me to pass files.
map [object Object]
....classes [object Object]
........class2 [object Object]
............value RA02
............areaColor 0xFFFFFF
............keyText Noord-Nederland2
........class1 [object Object]
............value RA01
............areaColor 0xEBDBAA
............keyText Noord-Nederland
....subTitle k
....layers [object Object]
........gemeenteNaam [object Object]
............visible false
............title [object Object]
................nl gemeentenamen
Best,
Jens
Am 16.02.2011 13:29, schrieb Geografiek:
Hi Jens,
What I basically want is to transform the xml structure into an object
structure.
xml:
<map id="gemRegioIndeling">
<subTitle></subTitle>
<classes>
<class1>
<areaColor>0xEBDBAA</areaColor>
<keyText><![CDATA[Noord-Nederland]]></keyText>
<value>RA01</value>
</class1>
<class2>
<areaColor>0xEBDBAA</areaColor>
<keyText><![CDATA[Noord-Nederland]]></keyText>
<value>RA01</value>
</class2>
<layers>
<gemeenteNaam>
<visible>false</visible>
<title>
<nl><![CDATA[gemeentenamen]]></nl>
</title>
</gemeenteNaam>
</layers>
</map>
flash object:
map
map.classes
map.classes,class1
map.classes,class1.areaColor
map.classes,class1.value
...
map.classes,class2
map.classes,class2.areaColor
map.classes,class2.value
...
...
...
map.layers
...
...
...
Things seem to work, but I want to traverse the properties tree of the flash
object and can't get that part working.
Thanks,
Willem van den Goorbergh
On 16 feb 2011, at 13:10, Jens Struwe wrote:
Having an example XML could be pretty useful.
And, actually, I don't understand the problem. What should be the output?
Please hand over all necessary info required to be able to help you.
Am 16.02.2011 12:43, schrieb Geografiek:
Hi list,
I posted this question a week ago on flash tiger, but never got an answer. So I
try my luck here.
I create an object and dynamically assign properties to it, values from
xml-nodes.
If an xml-node has child nodes the property assigned is an object and the
values of the child nodes are assigned as properties to that object:
private function createProperties(node:XML, container:*):void {
for each (var childNode:XML in node.*) {
if(childNode.children().length() == 0) {
container[childNode.localName()] = null;
} else if(childNode.children().length() == 1) {
container[childNode.localName()] = childNode.*;
} else {
container[childNode.localName()] = new Object();
createProperties(childNode, container[childNode.localName()]);
}
}
}
Now I want to trace what properties are created with the following function:
private function traceProperties(object:Object):void {
for (var prop:* in object) {
trace(prop + " is: " + object[prop]);
traceProperties(prop);
}
if(object.hasOwnProperty("layers")) {
trace("this.layers.gemeenteNaam.title is: " +
this.layers.gemeenteNaam.title);
trace("this.classes.class1.keyText is: " +
this.classes.class1.keyText);
}
}
This traces:
source is: null
note is: null
subTitle is: null
copyright is: Geografiek, 2011
mapType is: chorochromaat
classes is: [object Object]
key is: [object Object]
layers is: [object Object]
this.layers.gemeenteNaam.title is: gemeentenamen
this.classes.class1.keyText is: Noord-Nederland
From this I gather that all properties are actually created on their desired
level (last 2 traced lines).
But the function traceProperties() does not automatically catch all properties.
At least not the properies inside the objects
How do I check if an object has properties at all and how do I trace them?
TIA
Willem van den Goorbergh
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
Geografiek is a Dutch, Utrecht-based map and chart design company.
Willem van den Goorbergh can be contacted by telephone: (+31)30-2719512 or cell
phone: (+31)6-26372378
or by fax: (+31)302719687
snail mail: Hooghiemstraplein 89 3514 AX UTRECHT
Visit our website at: www.geografiek.nl
twitter: @wvdgoorbergh
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
Geografiek is a Dutch, Utrecht-based map and chart design company.
Willem van den Goorbergh can be contacted by telephone: (+31)30-2719512 or cell
phone: (+31)6-26372378
or by fax: (+31)302719687
snail mail: Hooghiemstraplein 89 3514 AX UTRECHT
Visit our website at: www.geografiek.nl
twitter: @wvdgoorbergh
=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
package {
import flash.display.Sprite;
public class XMLTest extends Sprite {
public function XMLTest() {
var xml : XML =
<map id="gemRegioIndeling">
<subTitle>k</subTitle>
<classes>
<class1>
<areaColor>0xEBDBAA</areaColor>
<keyText><![CDATA[Noord-Nederland]]></keyText>
<value>RA01</value>
</class1>
<class2>
<areaColor>0xFFFFFF</areaColor>
<keyText><![CDATA[Noord-Nederland2]]></keyText>
<value>RA02</value>
</class2>
</classes>
<layers>
<gemeenteNaam>
<visible>false</visible>
<title>
<nl><![CDATA[gemeentenamen]]></nl>
</title>
</gemeenteNaam>
</layers>
</map>
;
var object : Object = new Object();
object["map"] = new Object();
createProperties(xml, object["map"]);
traceProperties(object);
function traceProperties(object : Object, depth : uint
= 0) : void {
for (var prop : String in object) {
trace (prefix(depth) + prop, object[prop]);
if (object[prop] is Object)
traceProperties(object[prop], depth + 1);
}
function prefix(depth : uint) : String {
var prefix : String = "";
for (var i : uint = 0; i < depth; i++)
prefix += "....";
return prefix;
}
}
}
private function createProperties(node : XML, container : *) :
void {
for each (var childNode : XML in node.children()) {
var name : String = childNode.localName();
if (childNode.children().length() == 0) {
container[name] = null;
} else {
var size : int =
childNode.children().length();
if (size == 1 &&
XML(childNode.children()[0]).nodeKind() == "text") {
container[name] =
XML(childNode.children()[0]).toString();
} else {
container[name] = new Object();
createProperties(childNode,
container[name]);
}
}
}
}
}
}
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders