responseXML [AJAX]

2007-10-9 | 1:31 pm | Kein Kommentar »

Das XMLHttpRequest-Objekt besitzt neben der Eigenschaft responseText auch responseXML zur Abfrage des Rückgabewertes. Sofern der Server gueltiges XML liefert, ist responseXML ein XML-DOM-Objekt. Andernfalls enthaelt es den Wert null.

Diese XML Daten werden per Ajax verarbeitet:


<?xml version="1.0" encoding="UTF-8" ?>
<ResultSet resultsAvailable="121" resultsReturned="3">
   <Result>
      <Title>Aiaia</Title>
      <Summary>ein Rest</Summary>
      <Url>http://www.aiaia.de/Aiaia/</Url>
   </Result>
   <Result>
      <Title>Yolanda</Title>
      <Summary>ein Muelleimer</Summary>
      <Url>http://www.aiaia.de/Yolanda/</Url>
   </Result>
   <Result>
      <Title>dadidi</Title>
      <Summary>etwas Seltsames ist passiert</Summary>
      <Url>http://www.aiaia.de/Dadidi/</Url>
   </Result>
</ResultSet>
<script>
request = new XMLHttpRequest();

function dynTable() {
if (request.readyState == 4) {

var xml = request.responseXML;
var anzahl = document.getElementById("Anzahl");
var gesamt = document.getElementById("Gesamt");

//documentElement Wurzelknoten des XML-DOM
//getAttribute greift auf ein Attribut eines Knotens zu
anzahl.innerHTML = xml.documentElement.getAttribute("resultsReturned");
gesamt.innerHTML = xml.documentElement.getAttribute("resultsAvailable");

var tabelle = document.getElementById("Tabelle");
var tbody   = document.createElement("tbody");

//Liste aller Knoten mit dem angegebenen Namen
var ergebnisse = xml.getElementsByTagName("Result");
for (var i=0; i<ergebnisse.length; i++) {

// neue Zeile
var zeile   = document.createElement("tr");

// drei neue Zellen
var titel  = document.createElement("td");
var descr  = document.createElement("td");
var url    = document.createElement("td");

// pro Zelle ein Textknoten mit den Xml Daten
var titeltext, descrtext, urltext;

for (var j=0; j<ergebnisse[i].childNodes.length; j++) {
   var knoten = ergebnisse[i].childNodes[j];

   switch(knoten.nodeName) {
   case "Title":
      titeltext = document.createTextNode(knoten.firstChild.nodeValue);
      break;
   case "Summary":
      descrtext = document.createTextNode(knoten.firstChild.nodeValue);
      break;
   case "Url":
      urltext = document.createTextNode(knoten.firstChild.nodeValue);
      break;
   }
}

// Textkonten wird an Zelle gehaengt
titel.appendChild(titeltext);
descr.appendChild(descrtext);
url.appendChild(urltext);

// Zelle wird an Zeile gehaengt
zeile.appendChild(titel);
zeile.appendChild(descr);
zeile.appendChild(url);

// Zeile wird an tbody gehaengt
tbody.appendChild(zeile);

}

// tbody wird an Tabelle angehaengt
tabelle.appendChild(tbody);
}

window.onload = function() {
   request.open("GET","roman.xml");
   request.onreadystatechange = dynTable;
   request.send(null);
}
< /script>

Sag etwas dazu: