Kindelemente finden

luchs3

Erfahrenes Mitglied
Hi,
Ich habe eine xml Datei.mit 3 Knotenebenen.
Ich muss jede durchlaufen und bearbeiten.
Dies würde ich mit 3 verschachtelten for Schleifen machen.
Jetzt ist die Frage, wie ich auf die Kindelemente des aktuellen Elementes zugreifen kann.
Auf die erste Ebene greife ich mit getElementsByTagName zu.
Ich bräuchte sozusagen eine Methode mit der ich nur die Kindelemente erster Ebene bekomme.
getElementByAttributes funktioniert irgendwie nicht.
Code:
var personen = response.getElementsByTagName ('ladnr');

 for (var i = 0; i < personen.length; i++)
{
    var lad = personen[i].getAttribute('ILK_LADNR');<
    var artikel = personen[i].getElementByAttribute('ILK_LADNR', lad);

// 2.Knotenebene
    for (var e = 0; e < artikel.length; e++)
    {
        ......
    }
}
 
aber damit bekomme ich alle Kindknoten, auch die in der 3. Ebene.
Wie soll ich die zwei ebenen auseinanderhalten?
 
Ein Kindknoten ist immer ein direkter Nachfahre seines Elterknotens, Bsp:
Code:
<ebene1>
  <ebene2>
    <ebene3>
    </ebene3>
  </ebene2>
</ebene1>
wenn du dir die childNodes von Ebene1 holst, erhältst du nur <ebene2>

<ebene3> ist kein Kindknoten von <ebene1>, sondern ein Kindknoten von <ebene2>

Nach deiner Beschreibung also genau das, was du benötigst.
 
Ich verstehe die Ausgabe aber nicht ganz.
Mit diesem Code bekomme ich für das unten angeführte XML-File 9 Durchläufe in der for Schleife (die mit alert()) für den ersten ladnr Tag.

Code:
        var personen = response.getElementsByTagName ('ladnr');

        for (var i = 0; i < personen.length; i++)
        {
            ti = document.createElement('treeitem');
            tr = document.createElement ('treerow');
            td= document.createElement ('treecell');
            
            td.setAttribute('label', personen[i].getAttribute('ILK_LADNR'));
            tr.appendChild(td);
            ti.appendChild(tr);
            
            document.getElementById('abfrage_m').appendChild(ti);
            
            var artikel = personen[i].childNodes;

            for (var e = 0; e < artikel.length; e++)
            {
                alert('asdf'+e);
            }
        }
Code:
<ladnr ILK_LADNR="812504">
?
<artnr ILP_ARTNR="DC-RB2515PPW">
<row ILP_ARTNR="DC-RB2515PPW" ILK_LADNR="812504" ILK_JAHR="2004" ILK_MONAT="2" VKPREIS="552"/>
<row ILP_ARTNR="DC-RB2515PPW" ILK_LADNR="812504" ILK_JAHR="2004" ILK_MONAT="5" VKPREIS="552"/>
<row ILP_ARTNR="DC-RB2515PPW" ILK_LADNR="812504" ILK_JAHR="2005" ILK_MONAT="2" VKPREIS="540"/>
<row ILP_ARTNR="DC-RB2515PPW" ILK_LADNR="812504" ILK_JAHR="2005" ILK_MONAT="6" VKPREIS="270.00"/>
<row ILP_ARTNR="DC-RB2515PPW" ILK_LADNR="812504" ILK_JAHR="2007" ILK_MONAT="3" VKPREIS="270.00"/>
</artnr>
?
<artnr ILP_ARTNR="DC-RB3520PPW">
<row ILP_ARTNR="DC-RB3520PPW" ILK_LADNR="812504" ILK_JAHR="2005" ILK_MONAT="8" VKPREIS="270.00"/>
<row ILP_ARTNR="DC-RB3520PPW" ILK_LADNR="812504" ILK_JAHR="2006" ILK_MONAT="2" VKPREIS="540"/>
</artnr>
?
<artnr ILP_ARTNR="DC-RH1515EH">
<row ILP_ARTNR="DC-RH1515EH" ILK_LADNR="812504" ILK_JAHR="2008" ILK_MONAT="1" VKPREIS="220.00"/>
<row ILP_ARTNR="DC-RH1515EH" ILK_LADNR="812504" ILK_JAHR="2008" ILK_MONAT="6" VKPREIS="220.00"/>
</artnr>
?
<artnr ILP_ARTNR="DC-RH3030EHW">
<row ILP_ARTNR="DC-RH3030EHW" ILK_LADNR="812504" ILK_JAHR="2008" ILK_MONAT="8" VKPREIS="220.00"/>
</artnr>
</ladnr>
<ladnr ILK_LADNR="820302">
....
?
 
childNodes betrifft auch TextKnoten....je nach Browser werden dabei auch Textknoten berücksichtigt, welche nur aus Whitespaces bestehen. Das dürfte deine Zählung durcheinanderbringen.
 
:confused:

Was sind in diesem Fall Textknoten?
Ich verwende Firefox für XUL.
Wie kann ich das umgehen?
Das XML File ist doch genormt, wie kann der da was durcheinanderbringen?
 
Textknoten sind halt jene Knoten, welche nur aus Zeichendaten bestehen, am Bsp. des 1. ladnr
Code:
<ladnr ILK_LADNR="812504">ZEILENUMBRUCH
-
<artnr ILP_ARTNR="DC-RB2515PPW">
<row ILP_ARTNR="DC-RB2515PPW" ILK_LADNR="812504" ILK_JAHR="2004" ILK_MONAT="2" VKPREIS="552"/>
<row ILP_ARTNR="DC-RB2515PPW" ILK_LADNR="812504" ILK_JAHR="2004" ILK_MONAT="5" VKPREIS="552"/>
<row ILP_ARTNR="DC-RB2515PPW" ILK_LADNR="812504" ILK_JAHR="2005" ILK_MONAT="2" VKPREIS="540"/>
<row ILP_ARTNR="DC-RB2515PPW" ILK_LADNR="812504" ILK_JAHR="2005" ILK_MONAT="6" VKPREIS="270.00"/>
<row ILP_ARTNR="DC-RB2515PPW" ILK_LADNR="812504" ILK_JAHR="2007" ILK_MONAT="3" VKPREIS="270.00"/>
</artnr>ZEILENUMBRUCH
-
<artnr ILP_ARTNR="DC-RB3520PPW">
<row ILP_ARTNR="DC-RB3520PPW" ILK_LADNR="812504" ILK_JAHR="2005" ILK_MONAT="8" VKPREIS="270.00"/>
<row ILP_ARTNR="DC-RB3520PPW" ILK_LADNR="812504" ILK_JAHR="2006" ILK_MONAT="2" VKPREIS="540"/>
</artnr>ZEILENUMBRUCH
-
<artnr ILP_ARTNR="DC-RH1515EH">
<row ILP_ARTNR="DC-RH1515EH" ILK_LADNR="812504" ILK_JAHR="2008" ILK_MONAT="1" VKPREIS="220.00"/>
<row ILP_ARTNR="DC-RH1515EH" ILK_LADNR="812504" ILK_JAHR="2008" ILK_MONAT="6" VKPREIS="220.00"/>
</artnr>ZEILENUMBRUCH
-
<artnr ILP_ARTNR="DC-RH3030EHW">
<row ILP_ARTNR="DC-RH3030EHW" ILK_LADNR="812504" ILK_JAHR="2008" ILK_MONAT="8" VKPREIS="220.00"/>
</artnr>ZEILENUMBRUCH
</ladnr>
...4 Elementknoten <artnr> + 5 Textknoten =9


Umgehen kannst du dies, indem du den nodeType der Kindknoten prüfst...dieser hat bei Elementknoten(und nur jene willst du ja) den Wert 1

Oder du verzichtest auf die "Formatierung" des Quellcodes....dann hättest du keine Textknoten(weil keine Zeilenumbrüche) als childNodes von ladnr
Code:
<ladnr ILK_LADNR="812504"><artnr ILP_ARTNR="DC-RB2515PPW">
<row ILP_ARTNR="DC-RB2515PPW" ILK_LADNR="812504" ILK_JAHR="2004" ILK_MONAT="2" VKPREIS="552"/>
<row ILP_ARTNR="DC-RB2515PPW" ILK_LADNR="812504" ILK_JAHR="2004" ILK_MONAT="5" VKPREIS="552"/>
<row ILP_ARTNR="DC-RB2515PPW" ILK_LADNR="812504" ILK_JAHR="2005" ILK_MONAT="2" VKPREIS="540"/>
<row ILP_ARTNR="DC-RB2515PPW" ILK_LADNR="812504" ILK_JAHR="2005" ILK_MONAT="6" VKPREIS="270.00"/>
<row ILP_ARTNR="DC-RB2515PPW" ILK_LADNR="812504" ILK_JAHR="2007" ILK_MONAT="3" VKPREIS="270.00"/>
</artnr><artnr ILP_ARTNR="DC-RB3520PPW">
<row ILP_ARTNR="DC-RB3520PPW" ILK_LADNR="812504" ILK_JAHR="2005" ILK_MONAT="8" VKPREIS="270.00"/>
<row ILP_ARTNR="DC-RB3520PPW" ILK_LADNR="812504" ILK_JAHR="2006" ILK_MONAT="2" VKPREIS="540"/>
</artnr><artnr ILP_ARTNR="DC-RH1515EH">
<row ILP_ARTNR="DC-RH1515EH" ILK_LADNR="812504" ILK_JAHR="2008" ILK_MONAT="1" VKPREIS="220.00"/>
<row ILP_ARTNR="DC-RH1515EH" ILK_LADNR="812504" ILK_JAHR="2008" ILK_MONAT="6" VKPREIS="220.00"/>
</artnr><artnr ILP_ARTNR="DC-RH3030EHW">
<row ILP_ARTNR="DC-RH3030EHW" ILK_LADNR="812504" ILK_JAHR="2008" ILK_MONAT="8" VKPREIS="220.00"/>
</artnr></ladnr>
 
Na bumm!!
Sachen gibts, aber wird schon seinen Sinn haben.

Vielen Dank auf jeden Fall.
Große Rettung :)

Edit:
Welchen Sinn hat das eigentlich?
 

Neue Beiträge

Zurück