André Herrmann: Beware of »XML for Script«

Beitrag lesen

Zitat von molily:

"Ich verstehe deine Frage nicht ganz, denn genau das macht die Pseudo-DOM-Implementierung von »XML for script« in der Funktion liste_fuellen() bereits"

Die Ähnlichkeit ist mir beim umstellen dann auch aufgefallen ;)

Allerdings krieg ichs derzeit net zum laufen.
Als Vorlage habe ich den Import XML-Link von Matthias verwendet, allerdings bin ich noch nicht so fit was den Umgang damit betrifft. Ich schätze mal die Node-Zuordnungen stimmen einfach noch nicht oder die XML-Datei wurde nicht korrekt geladen, da ich bei jedem Zugriff auf die Nodes eine Meldung in der Fehlerkonsole erhalte, die mir erzählt, dass das gewählte Element keine Eigenschaften besitzt, also nicht existiert.
Ein alert hiervon:
 var xml_element = xmlDoc.getElementsByTagName(xml_tag);
 anzahl_elemente=xml_element.length;
gibt mir 0 aus, so als wenn immer noch dieses leere Dokument existiert:
      xmlDoc = document.implementation.createDocument("", "", null);

Hier mein letzter Code:

function startvorgang(lpic)
{
 if (lpic==1)
 {
  xmlDatei="lpic1.xml.html";
 }
 else
 {
  xmlDatei="lpic2.xml.html";
 }

if (document.implementation && document.implementation.createDocument)
 {
  alert("Firefox");
  xmlDoc = document.implementation.createDocument("", "", null);
  xmlDoc.onload = initialisierung;
 }
 else if (window.ActiveXObject)
 {
  xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.onreadystatechange = function () {
   if (xmlDoc.readyState == 4) initialisierung()
  };
  }
 else
 {
  alert('Mit diesem Browser funktioniert die Software nicht.\n Diese Software ist für den Browser Firefox optimiert');
  return;
 }
 xmlDoc.load(xmlDatei);

}
function progress(Wert)
{
 document.getElementById("rahmenbalken").firstChild.nodeValue = Wert +" % des Fragenkatalogs geladen...";
 document.getElementById("balken").style.width = Wert + "%";
}
// Initialisierungsvorgang der Testeinstellungen
function initialisierung() // strXML
{
 progress(5);
 liste_fuellen("fragetitel", "fragetitel", 1, "",5);
 progress(10);
 liste_fuellen("fragetyp", "fragetyp", 1, "",10);
 progress(20);
 liste_fuellen("punkte", "punkte", 1, "",20);
 progress(30);
 liste_fuellen("hinweis", "hinweis", 1, "",30);
 progress(40);
 liste_fuellen("erklaerung", "erklaerung", 1, "",40);
 progress(50);
 liste_fuellen("fragetext", "fragetext", 1, "",50);
 progress(60);
 liste_fuellen("antwort", "antworttext", 1, "",60);
 progress(70);
 liste_fuellen("antwort", "zufrage", 2, "zufrage",70);
 progress(80);
 liste_fuellen("antwort", "richtig", 2, "richtig",80);
 progress(90);
 matrix_fuellen();
 progress(100);
 document.getElementById("ladebalken").style.visibility = "hidden";
 document.getElementById("Einstellungen").style.visibility = "visible";
 document.Fragenanzahl.VerfuegbarAnzahl.value = AnzahlFragenkatalog();
}
function liste_fuellen(xml_tag, liste, typ, attribut, prozent)
{
 var xml_element = xmlDoc.getElementsByTagName(xml_tag);
 anzahl_elemente=xml_element.length;

for (i=0;i<anzahl_elemente;i++)
 {
  alert("1. schleife");
  var element = xml_element[i];
  for (j=0;j<xml_element[i].childNodes.length;j++)
  {
   alert ("2. Schleife");
   var inhalt = xml_element[i].childNodes[j].firstChild.nodeValue;
   if (typ==2)
   {
    var referenceNode = element;
    var attributeValue = referenceNode.getAttribute(attribut);
    inhalt = attributeValue;
   }
   NeuerEintrag = new Option(inhalt, inhalt, false, true);
   parent.teststeuerung.document.getElementById(liste).options[parent.teststeuerung.document.getElementById(liste).length] = NeuerEintrag;
   i++;
  }
 }
}