Цитата:
|
Сообщение от 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 медленее в полтора с лишним раза.