ERLEDIGT
JA
JA
ANTWORTEN
11
11
ZUGRIFFE
435
435
EMPFEHLEN
-
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 :1 2 3 4 5 6 7 8 9 10 11 12 13
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++) { ...... } }
-
Moin,
auf Kindknoten kannst du über die childNodes-Auflistung zugreifen.
-
aber damit bekomme ich alle Kindknoten, auch die in der 3. Ebene.
Wie soll ich die zwei ebenen auseinanderhalten?
-
13.04.09 10:04 #4
Frag doch ab, ob parentNode des Childs gleich dem obersten ist. Dann dürfteste es ein 1Level Child sein.
MFG Scipio
Ein Danke für hilfreiche Antworten ist gern gesehen.
-
Ein Kindknoten ist immer ein direkter Nachfahre seines Elterknotens, Bsp:
wenn du dir die childNodes von Ebene1 holst, erhältst du nur <ebene2>Code :1 2 3 4 5 6
<ebene1> <ebene2> <ebene3> </ebene3> </ebene2> </ebene1>
<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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
<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.
-

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
...4 Elementknoten <artnr> + 5 Textknoten =9Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
<ladnr ILK_LADNR="812504">[color=red]ZEILENUMBRUCH -[/color] <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>[color=red]ZEILENUMBRUCH -[/color] <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>[color=red]ZEILENUMBRUCH -[/color] <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>[color=red]ZEILENUMBRUCH -[/color] <artnr ILP_ARTNR="DC-RH3030EHW"> <row ILP_ARTNR="DC-RH3030EHW" ILK_LADNR="812504" ILK_JAHR="2008" ILK_MONAT="8" VKPREIS="220.00"/> </artnr>[color=red]ZEILENUMBRUCH[/color] </ladnr>
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 ladnrCode :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
<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?
-
Wobei ich in diesem speziellen Fall wohl eher anders auf die Knoten zugreifen würde
Code :1
var artikel = personen[i].getElementsByTagName('artnr');
Das würde bei einer tiefergehenden Verschachtelung zwar nicht nur die Kindknoten finden, aber in diesem Fall ist ja nichts tiefer verschachtelt....müsstest du halt wissen, ob es auch so bleibt
Oder gleich per XSL transformieren, wobei ich allerdings nicht weiss, ob das im FF bei XUL möglich ist.
-
Stimmt eigentlich, gefällt mir auch gut.
Aber das mit den childNodes hätte mich früher oder später sicher erwischt.
Ähnliche Themen
-
z-Index und Kindelemente
Von anhadikal im Forum CSSAntworten: 7Letzter Beitrag: 01.02.09, 19:57 -
<object> Kindelemente?
Von Inspector im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 05.02.08, 14:14 -
getNextNode / Kindelemente rekursiv besuchen
Von aceman im Forum Javascript & AjaxAntworten: 1Letzter Beitrag: 25.05.05, 02:42 -
IP Finden?
Von michi_pc im Forum SmalltalkAntworten: 21Letzter Beitrag: 07.02.05, 16:39 -
DNS finden
Von Bigbutcher im Forum PHPAntworten: 3Letzter Beitrag: 03.06.03, 17:54





Zitieren
Login





