Показать сообщение отдельно
Старый 09.10.2007, 17:55
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 20  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от chingachgoog
Это почемуже он не переваривает текстовые ноды?
Он не только их переваривает, но и позволяет обратиться к следующим за текстовым нодом узлом, а в примере с while все следующее он уже не увидит.
Полный код, пожалуйста.

Потому как я не понял, как решится проблема с nodeValue:


Код:
var str = "<block><item>1</item><item>2</item><item>3</item></block>";
var xml = new XML();
xml.ignoreWhite = true;
xml.parseXML(str);

var node = xml.firstChild.firstChild;
while (node) {
	trace("значение: "+node.firstChild.nodeValue);
	node = node.nextSibling;
}

for (i=0; i<xml.firstChild.childNodes.length; i++) {
	node = xml.firstChild.childNodes[i];
	trace(node.firstChild.nodeValue);
}
А вот заодно тест:

Код:
var str = "<block><item>1</item><item>2</item><item>3</item></block>";
var xml = new XML();
xml.ignoreWhite = true;
xml.parseXML(str);
t = getTimer();
for (j=0; j<100000; j++) {
	node = xml.firstChild.firstChild;
	while (node) {
		node = node.nextSibling;
	}
}
trace(getTimer()-t); // 1028
t = getTimer();
for (j=0; j<100000; j++) {
	n = xml.firstChild.childNodes;
	l = n.length;
	for (i=0; i<l; i++) {
		node = n[i];
	}
}
trace(getTimer()-t); // 1689
Даже со всеми оптимизациями обычный перебор через for медленее в полтора с лишним раза.


Последний раз редактировалось etc; 09.10.2007 в 18:02.