XML wird nicht richtig verarbeitet

Black Panter

Mitglied
hi,

ich hab mal wieder ein problem und zwar:

ich habe eine XML Datei:

<?xml version="1.0"?>
<gc09>
<head>
<name>Name</name>
<plz>Postleitzahl</plz>
<wohnort>Wohnort</wohnort>
<abreiseort>Abreisebahnhof/-ort</abreiseort>
<anreise>Anreisedatum</anreise>
<abreise>Abreisedatum</abreise>
</head>
<user>
<name>[Name]</name>
<plz>[PLZ]</plz>
<wohnort>[Wohnort]</wohnort>
<abreiseort>[Abfahrtsort]</abreiseort>
<anreise>[Anreisedatum]</anreise>
<abreise>[Abreisedatum]</abreise>
</user>
</gc09>
und eine dazugehörige HTML-Seite:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Mitfahrer zur GC 09</title>
</head>
<body>
<script type="text/javascript">
o = null;
if(window.XMLHttpRequest)
{o = new XMLHttpRequest();}
else if(window.ActiveXObject)
{
try
{o = new ActiveXObject('Msxml2.XMLHTTP');}
catch(e1)
{try
{o = new ActiveXObject('Microsoft.XMLHTTP');}
catch(e2)
{}
}
}

o.open('GET','data.xml',false) //Laden der XML-Datei
o.send(null);
x = o.responseXML.documentElement;


document.write('<table style="border:thin solid #000;>');
for (i=0;i<=x.childNodes.length;i++)
{
document.write('<tr>');
for (j=0;j<x.childNodes.childNodes.length;j++)
{
document.write('<td>'+x.childNodes(i).childNodes(i).data+'</td>');
}
document.write('</tr>');
}
document.write('</table>');
</script>
</body>
</html>

In der XML-Datei stehen beliebig viele <user> drin.

Mein Problem ist, das mir die Tabelle nicht angezeigt wird. In der Fehlerkonsole wird mir gesagt das "x.childNodes.childNodes.length" nicht definiert ist.

Außerdem wird mir bei "x.firstChild.nodeName" "#Text" ausgegeben und nicht der Tag-Name.

Wo liegt mein Fehler? Die ganzen Tutorials u.ä. die ich bei Google gefunden haben, waren da leider auch nicht hilfreich.

Grüße aus Japan
Sören
 
Moin,

es gibt nicht nur Elementknoten, sondern auch Textknoten.

zwischen <gc09> und <head> steht ein Zeilenumbruch...auch das ist "Etwas"(zumindest in einigen Browsern)...eben ein Textknoten(worauf dich #text hinweisen will).

Als Workaround könntest du in deiner Schleife erstmal prüfen,ob der aktuelle Knoten ein Elementknoten ist, bevor du weitermachst.
Prüfen kannst du das bspw. über den nodeType
 
Zuletzt bearbeitet:
du versuchst da data auszugeben...das ist nun wiederum die Eigenschaft von Textknoten....du müsstest dies also vom firstChild des Elementknotens abholen.
Code:
o.open('GET','data.xml',false) //Laden der XML-Datei
o.send(null);
x = o.responseXML.documentElement;

document.write('<table style="border:thin solid #000;">');
for (i=0;i<x.childNodes.length;i++)
{
  if(x.childNodes[i].nodeType==1)//Prüfen auf ElementKnoten
  {
    document.write('<tr>');
    for (j=0;j<x.childNodes[i].childNodes.length;j++)
    {
      if(x.childNodes[i].childNodes[j].nodeType==1)
      {
        //Prüfen auf ElementKnoten
        document.write('<td>'+x.childNodes[i].childNodes[j].firstChild.data+'</td>');
      }
    }
    document.write('</tr>');
  }
}
document.write('</table>');
 
Zurück