Показать сообщение отдельно
Старый 31.10.2007, 04:17
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 6  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
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"
		}
	}
}


Последний раз редактировалось udaaff; 31.10.2007 в 04:20.