88 lines
2.2 KiB
ActionScript
88 lines
2.2 KiB
ActionScript
package ckaction.act {
|
|
|
|
public class XML2JSON {
|
|
|
|
private static var _arrays: Array;
|
|
|
|
public static function parse(node: * ): Object {
|
|
var obj: Object = {};
|
|
var numOfChilds: int = node.children().length();
|
|
for (var i: int = 0; i < numOfChilds; i++) {
|
|
var childNode: * = node.children()[i];
|
|
var childNodeName: String = childNode.name();
|
|
var value: * ;
|
|
if (childNode.children().length() == 1 && childNode.children()[0].name() == null) {
|
|
if (childNode.attributes().length() > 0) {
|
|
value = {
|
|
_content: childNode.children()[0].toString()
|
|
};
|
|
var numOfAttributes: int = childNode.attributes().length();
|
|
for (var j: int = 0; j < numOfAttributes; j++) {
|
|
value[childNode.attributes()[j].name().toString()] = childNode.attributes()[j];
|
|
}
|
|
} else {
|
|
value = childNode.children()[0].toString();
|
|
}
|
|
} else {
|
|
value = parse(childNode);
|
|
}
|
|
if (obj[childNodeName]) {
|
|
if (getTypeof(obj[childNodeName]) == "array") {
|
|
obj[childNodeName].push(value);
|
|
} else {
|
|
obj[childNodeName] = [obj[childNodeName], value];
|
|
}
|
|
} else if (isArray(childNodeName)) {
|
|
obj[childNodeName] = [value];
|
|
} else {
|
|
obj[childNodeName] = value;
|
|
}
|
|
}
|
|
numOfAttributes = node.attributes().length();
|
|
for (i = 0; i < numOfAttributes; i++) {
|
|
obj[node.attributes()[i].name().toString()] = node.attributes()[i];
|
|
}
|
|
if (numOfChilds == 0) {
|
|
if (numOfAttributes == 0) {
|
|
obj = "";
|
|
} else {
|
|
obj._content = "";
|
|
}
|
|
}
|
|
return obj;
|
|
}
|
|
public static function get arrays(): Array {
|
|
if (!_arrays) {
|
|
_arrays = [];
|
|
}
|
|
return _arrays;
|
|
}
|
|
public static function set arrays(a: Array): void {
|
|
_arrays = a;
|
|
}
|
|
private static function isArray(nodeName: String): Boolean {
|
|
var numOfArrays: int = _arrays ? _arrays.length : 0;
|
|
for (var i: int = 0; i < numOfArrays; i++) {
|
|
if (nodeName == _arrays[i]) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
private static function getTypeof(o: * ): String {
|
|
if (typeof (o) == "object") {
|
|
if (o.length == null) {
|
|
return "object";
|
|
} else if (typeof (o.length) == "number") {
|
|
return "array";
|
|
} else {
|
|
return "object";
|
|
}
|
|
} else {
|
|
return typeof (o);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
} |