Edi: XML mit JavaScript: Problem mit Knoten

Ich komme nicht mehr weiter... :-(

Also, ich habe eine XML-Datei mit folgender Struktur:

ROOT
   KNOTEN 1
     KNOTEN 2
       KNOTEN 3
          KNOTEN 4a
             KNOTEN 5a
             KNOTEN 5b
          KNOTEN 4b
             KNOTEN 5c
             KNOTEN 5d

Mit dem 1. Skript kann ich nun aber immer nur Folgendes lesen:

ROOT
   KNOTEN 1
     KNOTEN 2
       KNOTEN 3
          KNOTEN 4a
          KNOTEN 4b

Mit dem 2. Skript funktioniert Folgendes:

ROOT
   KNOTEN 1
     KNOTEN 2
       KNOTEN 3
          KNOTEN 4a
             KNOTEN 5a
             KNOTEN 5b

Das 1. Skript:

for (i=0;i<y.length;i++)
  {
  if (y[i].nodeType!=3)
  document.write("<br />");
    {
    document.write("Nodename: " + y[i].nodeName);
    document.write(" (value: " + y[i].childNodes[0].nodeValue + ")<br />");
    for (z=0;z<y[i].childNodes.length;z++)
      {
      if (y[i].childNodes[z].nodeType!=3)
        {
        document.write("Nodename: " + y[i].childNodes[z].nodeName);
        document.write(" (value: " + y[i].childNodes[z].childNodes[0].nodeValue + ")<br />");
     for (m=0;m<y[i].childNodes[z].childNodes.length;m++)
       {
       if (y[i].childNodes[z].childNodes[m].nodeType!=3)
      {
            document.write("Nodename: " + y[i].childNodes[z].childNodes[m].nodeName);
            document.write(" (value: " + y[i].childNodes[z].childNodes[m].childNodes[0].nodeValue + ")<br />");
            }
          }
        }
      }
    }
  }

Das 2. Skript:

for (i=0;i<y.length;i++)
  {
  if (y[i].nodeType!=3)
    {
    document.write("Nodename: " + y[i].nodeName);
    document.write(" (value: " + y[i].childNodes[0].nodeValue + ")<br />");
    for (z=0;z<y[i].childNodes.length;z++)
      {
      if (y[i].childNodes[z].nodeType!=3)
      document.write("<br />");
        {
        document.write("Nodename: " + y[i].childNodes[z].nodeName);
        document.write(" (value: " + y[i].childNodes[z].childNodes[0].nodeValue + ")<br />");
     for (m=0;m<y[i].childNodes[z].childNodes.length;m++)
       {
       if (y[i].childNodes[z].childNodes[m].nodeType!=3)
         {
            document.write("Nodename: " + y[i].childNodes[z].childNodes[m].nodeName);
            document.write(" (value: " + y[i].childNodes[z].childNodes[m].childNodes[0].nodeValue + "<br />");
      for (n=0;n<y[i].childNodes[z].childNodes[m].childNodes.length;n++)
        {
           if (y[i].childNodes[z].childNodes[m].childNodes[n].nodeType!=3)
             {
                document.write("Nodename: " + y[i].childNodes[z].childNodes[m].childNodes[n].nodeName);
                document.write(" (value: " + y[i].childNodes[z].childNodes[m].childNodes[n].childNodes[0].nodeValue + ")<br />");
                }
              }
            }
          }
        }
      }
    }
  }

Habe ich da irgend etwas übersehen?!

  1. Hellihello,

    warum postest du nicht mit

      
    alert("syntax-hightlightning");  
    
    

    ?

      
    <?xml version=1.0>  
    <und>  
    <wo ist dein problem/>?  
    </und>  
    
    

    kannst du das 2. script nicht mit dem ersten vergleichen? das zweite funktioniert doch, also ist doch alles prima.

    gruß frankx

    1. Lieber frankx

      So einfach ist es leider nicht... Beide Skripte funktionieren, gehen mit der Knotenstruktur aber verschieden um.

      Konkret: Dass zweite Skript hat einen childNode mehr als das erste, bleibt dann aber hängen, wenn die childNodes der untersten Ebene das erste Mal abgearbeitet worden sind:

      document.write("Nodename: " + y[i].childNodes[z].childNodes[m].nodeName);
      document.write(" (value: " + y[i].childNodes[z].childNodes[m].childNodes[0].nodeValue + ")<br />");

      Das erste Skript hat einen childNode weniger und stellt die Struktur der ganzen Datei bis zur Ebene der angesprochenen childNodes richtig dar.

      Kann das an der xls-Datei liegen oder hängt das vielleicht mit der Anzahl Ebenen zusammen? Beides macht für mich allerdings wenig Sinn...

      Edi

      1. Hellihello,

        nach wie vor finde ich es etwas mühsam, diese sache ohne Syntaxhighlightning zu sehen. Es wäre sicherlich auch sinnvoll, das zusammen mit einem echten Test-XML zu posten. Du klammerst alle Textknoten aus, soviel ist mir aufgefallen. Ob das mit Deinem Problem zu tun hat, weiß ich nicht.

        Gruß, frankx

        1. Lieber frankx

          Danke für Dein Insistieren! Ich wollte den Code hier noch einmal posten, allerdings etwas vereinfacht sowie die xml-Datei. Dabei habe ich nun festgestellt, dass diese (ein Beispiel aus einem Manual des Europäischen Patentamts) einen Fehler enthält, nämlich einen verwaisten Endtag </>. Also: Die Skripts funktionieren, aber die xml-Datei nicht...

          Edi

          1. Hellihello Edi,

            mit ein Grund für das "Insistieren", das "sowas" bei rauskommen kann.

            frankx

    2. Sorry, jetzt habe ich den falschen Code-Schnipsel erwischt... In meiner Antwort handelt es sich um ein Schnipsel aus dem ersten Skript. Das zweite geht einen childNode weiter:

      document.write("Nodename: " + y[i].childNodes[z].childNodes[m].childNodes[n].nodeName);
                      document.write(" (value: " + y[i].childNodes[z].childNodes[m].childNodes[n].childNodes[0].nodeValue  + ")<br />");

      Edi

  2. Nochmals richtig:

    document.write("Nodename: " + y[i].childNodes[z].childNodes[m].childNodes[n].nodeName);
                    document.write(" (value: " + y[i].childNodes[z].childNodes[m].childNodes[n].childNodes[0].nodeValue  + "<br />");

    Edi