XML mit JavaScript: Problem mit Knoten
Edi
- xml
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?!
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
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
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
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
Hellihello Edi,
mit ein Grund für das "Insistieren", das "sowas" bei rauskommen kann.
frankx
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
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