xml auslesen mit js
MarkusR.
- javascript
hallo,
ich hab jetzt mehrere tage rumprobiert und bin echt am ende, es will nicht so wie ich.
also ich habe eine xml datei mit mehreren daten, so:
<programm>
<event>
<name>ereignis1</name>
<person>name</person>
<date>
<day>24</day>
<month>06</month>
<year>2007</year>
</date>
<time>17 Uhr</time>
<place>strasse1</place>
<note></note>
</event>
<event> ... </event> usw.
</programm>
die xml soll nun ausgelesen werden mittels javascript, denn ich möchte gerne alle Daten wo der name ereignis1 ist(oder eben nur ein anderer) und dann die verschiedenen ereignisse in eine tabelle, aber natürlich nur die aktuellen.
das problem ist eines teils es soll auf IE und Mozilla laufen, meine bisherigen versuche haben das leider nicht, der code sollte möglichst kompakt sein und ich möchte im code nichts verändern müssen, wenn ich die xml änder. das ist ja auch der sinn der sache.
also bis jez hab ich das so realisiert:
<script type="text/javascript">
var xmlDoc;
var i = 0;
var tag, monat, jahr;
function loadXML()
{
if (window.ActiveXObject)
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.load("programm.xml");
getmessage();
}
else if (document.implementation && document.implementation.createDocument)
{
xmlDoc=document.implementation.createDocument("","",null);
xmlDoc.load("programm.xml");
xmlDoc.onload=getmessage;
}
else
{
alert('script wird nicht unterstuetzt');
}
}
var zeit = new Date();
tag = zeit.getDate();
monat = (zeit.getMonth() + 1);
jahr = zeit.getFullYear();
function getmessage()
{
while ( i < 4 )
{
if (xmlDoc.getElementsByTagName("name")[i].childNodes[0].nodeValue == "ereignis1")
{
if( xmlDoc.getElementsByTagName("year")[i].childNodes[0].nodeValue == jahr)
{
if( xmlDoc.getElementsByTagName("month")[i].childNodes[0].nodeValue == monat)
{
if ( xmlDoc.getElementsByTagName("day")[i].childNodes[0].nodeValue >= tag)
{
document.getElementById("person1").innerHTML= xmlDoc.getElementsByTagName("person")[i].childNodes[0].nodeValue;
document.getElementById("time1").innerHTML= xmlDoc.getElementsByTagName("time")[i].childNodes[0].nodeValue;
document.getElementById("place1").innerHTML= xmlDoc.getElementsByTagName("place")[i].childNodes[0].nodeValue;
document.getElementById("day1").innerHTML= xmlDoc.getElementsByTagName("day")[i].childNodes[0].nodeValue;
document.getElementById("month1").innerHTML= xmlDoc.getElementsByTagName("month")[i].childNodes[0].nodeValue;
document.getElementById("year1").innerHTML= xmlDoc.getElementsByTagName("year")[i].childNodes[0].nodeValue;
}
}
else if( xmlDoc.getElementsByTagName("month")[i].childNodes[0].nodeValue > monat)
{
document.getElementById("person1").innerHTML= xmlDoc.getElementsByTagName("person")[i].childNodes[0].nodeValue;
document.getElementById("day1").innerHTML= xmlDoc.getElementsByTagName("day")[i].childNodes[0].nodeValue;
document.getElementById("month1").innerHTML= xmlDoc.getElementsByTagName("month")[i].childNodes[0].nodeValue;
document.getElementById("year1").innerHTML= xmlDoc.getElementsByTagName("year")[i].childNodes[0].nodeValue;
document.getElementById("time1").innerHTML= xmlDoc.getElementsByTagName("time")[i].childNodes[0].nodeValue;
document.getElementById("place1").innerHTML= xmlDoc.getElementsByTagName("place")[i].childNodes[0].nodeValue;
}
}
else if ( xmlDoc.getElementsByTagName("year")[i].childNodes[0].nodeValue > jahr)
{
document.getElementById("person1").innerHTML= xmlDoc.getElementsByTagName("person")[i].childNodes[0].nodeValue;
document.getElementById("day1").innerHTML= xmlDoc.getElementsByTagName("day")[i].childNodes[0].nodeValue;
document.getElementById("month1").innerHTML= xmlDoc.getElementsByTagName("month")[i].childNodes[0].nodeValue;
document.getElementById("year1").innerHTML= xmlDoc.getElementsByTagName("year")[i].childNodes[0].nodeValue;
document.getElementById("time1").innerHTML= xmlDoc.getElementsByTagName("time")[i].childNodes[0].nodeValue;
document.getElementById("place1").innerHTML= xmlDoc.getElementsByTagName("place")[i].childNodes[0].nodeValue;
}
}
i = i+1;
//und jetzt das ganze noch n paar mal, je nach dem wie viele zeilen ich haben will
</script>
</head>
<body onload="loadXML()">
<table border="1">
<tr>
<td><span id="day1"></span><span>.</span>
<span id="month1"></span><span>.</span><span id="year1"></span></td>
<td id="time1"> </td><td id="person1"> 1</td>
<td id="place1"></td>
</tr>
</table>
</body>
</html>
also wie ihr schon seht, sehr kompliziert. ich hab das ganze auch schon mit einer schleife probiert und mit document.writeln(..) aber das hat auch nicht funktioniert.
wär echt super cool, wenn ihr mir helfen könntet
mfg der markus
Hello out there!
die xml soll nun ausgelesen werden mittels javascript,
Warum JavaScript?
Zur Lösung des Problems ist XSLT prädestiniert.
See ya up the road,
Gunnar