XML без атрибутов:

Код:
<root>
<firstChild>
<firstChild>textNode</firstChild>
<secondChild>textNode2</secondChild>
</firstChild>
<secondChild>textNode3</secondChild>
</root>
Обходим следующим методом:

Код:
function createObj(currentNode:XMLNode):Object {
if (currentNode.hasChildNodes) {
var currentObj:Object
if (currentNode.firstChild.nodeType == 1) {
currentObj = new Object();
for (var elementNode:XMLNode = currentNode.firstChild; elementNode != null; elementNode=elementNode.nextSibling) {
currentObj[elementNode.nodeName] = arguments.callee(elementNode);
}
} else {
currentObj = currentNode.firstChild.nodeValue;
}
}
return currentObj;
}
Возвращает объект:

Код:
{
firstChild: {
firstChild: "textNode",
secondChild: "textNode2"
},
secondChild: "textNode3"
}
XML с атрибутами:

Код:
<root>
<firstChild attr="something">
<firstChild>textNode</firstChild>
<secondChild>textNode2</secondChild>
</firstChild>
<secondChild attr="something2">textNode3</secondChild>
</root>
Обходим:

Код:
function createObj(currentNode:XMLNode):Object {
var currentObj:Object = new Object();
var attributesObj:Object = new Object();
for (var attr in currentNode.attributes) {
attributesObj[attr] = currentNode.attributes[attr];
}
currentObj.attributes = attributesObj;
if (currentNode.hasChildNodes) {
if (currentNode.firstChild.nodeType == 1) {
for (var elementNode:XMLNode = currentNode.firstChild; elementNode != null; elementNode=elementNode.nextSibling) {
currentObj[elementNode.nodeName] = arguments.callee(elementNode);
}
} else {
currentObj.value = currentNode.firstChild.nodeValue;
}
}
return currentObj;
}
Возвращает объект:

Код:
{
firstChild: {
firstChild: {
value: "textNode"
},
secondChild: {
value: "textNode2"
},
attributes: {
attr: "something"
}
},
secondChild: {
value: "textNode3",
attributes: {
attr: "something2"
}
}
}