PDA

Просмотр полной версии : Оптимизация куска парсера


Sh@man
26.11.2005, 16:54
Помогите оптимизировать кусок кода, а то после рабочей недели ничего в голову не лезет. Спасибо.

this.cList = new XML();
this.cList = ListXML.firstChild;
this.media = this.cList.firstChild;
while (i<ListXML.firstChild.childNodes.length) {
curnode = this.media.firstChild;
//trace("this.media="+this.media);
ident = this.media.attributes.id;
//trace("ident="+ident);
ctype = curnode.firstChild.nodeValue;
ccode = curnode.nextSibling.firstChild.nodeValue;
ico_projection = curnode.nextSibling.nextSibling.firstChild.nodeValue;
built = curnode.nextSibling.nextSibling.nextSibling.firstChild.nodeValue;
light = curnode.nextSibling.nextSibling.nextSibling.nextSibling.firstChild.nodeValue;
sectorcode = curnode.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.firstChild.nodeValue;
X = curnode.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.firstChild.nodeValue;
Y = curnode.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.firstChild.nodeValue;
_location = curnode.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.firstChild.nodeValue;
rs = curnode.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.firstChild.nodeValue;
quant = curnode.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.nextSibling.firstChild.nodeValue;

....
this.media = this.media.nextSibling;
i++;
}

PinkPong
27.11.2005, 03:23
сложно понять конечно...
не влазит столько за раз в голову
...
может вот такая штука поможет ? я пользуюсь на ура при разборе XML

метод без аргументов; возвращает следующий элемент XMLNode в дереве документа XML. Если при переборе достигнут конец документа, метод возвращает значение null.

исходный код
XMLNode.prototype.nextNode = function() {
if (this.firstChild != null) {
return this.firstChild;
}
var n = this;
while (n.nextSibling == null) {
if (n.parentNode) {
n = n.parentNode;
} else {
return null;
}
}
return n.nextSibling;
};
пример использования

myXML = new XML ("<n1><n2><n3></n3><n4><n5><n6><n7><n8><n9></n9></n8></n7></n6></n5></n4></n2><n10></n10></n1>");
nod = myXML.firstChild;
while (nod) {
trace (nod.nodeName);
nod = nod.nextNode();
}

автор вроде Iv

Sh@man
27.11.2005, 14:53
Ок.Спасибо.Сейчас попробую.

PinkPong
27.11.2005, 15:26
алгоритм немного сложный на первый взгляд...
нашел его когда нужно было XML парсить..
если сразу непонятно будет, возьми небольшой но реальный XML (не а в с) и пройди его на бумажке по этому алгоритму
сразу все понятно станет..
весьма изящно и работает на все 100 :D