tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
435
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    luchs3 luchs3 ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Ort
    Wien
    Beiträge
    195
    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++)
        {
            ......
        }
    }
     

  2. #2
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Moin,


    auf Kindknoten kannst du über die childNodes-Auflistung zugreifen.
     

  3. #3
    luchs3 luchs3 ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Ort
    Wien
    Beiträge
    195
    aber damit bekomme ich alle Kindknoten, auch die in der 3. Ebene.
    Wie soll ich die zwei ebenen auseinanderhalten?
     

  4. #4
    Avatar von SCIPIO-AEMILIANUS
    SCIPIO-AEMILIANUS SCIPIO-AEMILIANUS ist offline aka DonMahallem
    Registriert seit
    Mar 2007
    Ort
    Saxonburg(Pa)
    Beiträge
    375
    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.

  5. #5
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Ein Kindknoten ist immer ein direkter Nachfahre seines Elterknotens, Bsp:
    Code :
    1
    2
    3
    4
    5
    6
    
    <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.
     

  6. #6
    luchs3 luchs3 ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Ort
    Wien
    Beiträge
    195
    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">
    ....
    −
     

  7. #7
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    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.
     

  8. #8
    luchs3 luchs3 ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Ort
    Wien
    Beiträge
    195


    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?
     

  9. #9
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    Textknoten sind halt jene Knoten, welche nur aus Zeichendaten bestehen, am Bsp. des 1. ladnr
    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
    
    <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>
    ...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 :
    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>
     

  10. #10
    luchs3 luchs3 ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Ort
    Wien
    Beiträge
    195
    Na bumm!!
    Sachen gibts, aber wird schon seinen Sinn haben.

    Vielen Dank auf jeden Fall.
    Große Rettung

    Edit:
    Welchen Sinn hat das eigentlich?
     

  11. #11
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    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.
     

  12. #12
    luchs3 luchs3 ist offline Mitglied Gold
    Registriert seit
    Feb 2005
    Ort
    Wien
    Beiträge
    195
    Stimmt eigentlich, gefällt mir auch gut.
    Aber das mit den childNodes hätte mich früher oder später sicher erwischt.
     

Ähnliche Themen

  1. z-Index und Kindelemente
    Von anhadikal im Forum CSS
    Antworten: 7
    Letzter Beitrag: 01.02.09, 19:57
  2. <object> Kindelemente?
    Von Inspector im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 05.02.08, 14:14
  3. getNextNode / Kindelemente rekursiv besuchen
    Von aceman im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 25.05.05, 02:42
  4. IP Finden?
    Von michi_pc im Forum Smalltalk
    Antworten: 21
    Letzter Beitrag: 07.02.05, 16:39
  5. DNS finden
    Von Bigbutcher im Forum PHP
    Antworten: 3
    Letzter Beitrag: 03.06.03, 17:54