Hi,
danke erstmal für die hilfreichen Tipps!
Nach einiger Überlegung bin ich auch zu dem Schluss gekommen, dass XML for <script> bestenfalls die drittbeste Lösung für mich ist.
Allerdings möchte ich schon bei XML bleiben, da mein Kunde die Daten schon so vorliegen hat und ich zur Entwicklung nicht noch die Ganzen Daten anpassen möchte.
Zudem sind Erweiterungen für den Kunden nach dem XML-Schema einfacher zu behandeln.
So möchte ich mein Glück mit dem von Matthias vorgeschlagenen Import XML -Link probieren.
Auf den ersten Blick sieht es auch so aus als ob der Eingriff im Code nicht so dramatisch ausfällt, da das gesamte XML-Dokument am Anfang eingeladen wird und anschließend mit den Listen weitergearbeitet wird, also kein weiterer Zugriff auf die XML-Datei erfolgt.
Leider ist in dem Link oben nicht beschrieben, wie ich auf Attribute des Tags zugreifen kann. Im Beispiel mit dem <emporor> werden lediglich die Inhalte der Tags eingelesen. In meinem Fall ist es aber nötig den Inhalt der Attribute einzulesen.
In meinem Beispiel handelt es sich um folgendes XML-Schema:
<fragetitel>Frage 1</fragetitel>
<fragetyp>auswahl</fragetyp>
<punkte>1</punkte>
<hinweis>keiner</hinweis>
<erklaerung>keine</erklaerung>
<fragetext>
Das Kommando jobs gibt folgende Ausgabe auf Ihrem Terminal aus:
[1]+ Stopped /usr/bin/programm
Welches Kommando setzt die Ausführung des Programms im Hintergrund fort, so dass Sie weitere Kommandos auf dem gleichen Terminal eingeben können?
</fragetext>
<antwort zuFrage="Frage 1" richtig="ja">bg 1</antwort>
<antwort zuFrage="Frage 1" richtig="nein">continue programm</antwort>
<antwort zuFrage="Frage 1" richtig="nein">exec programm</antwort>
<antwort zuFrage="Frage 1" richtig="nein">fg programm</antwort>
<antwort zuFrage="Frage 1" richtig="nein">programm &</antwort>
Der Zugriff auf XML erfolgt in den Funktionen startvorgang, initialisierung und liste_fuellen (Nach der alten, fehlerhaften Methode):
function startvorgang(lpic)
{
if (lpic==1)
{
xmlDatei="lpic1.xml.html";
}
else
{
xmlDatei="lpic2.xml.html";
}
xmlIOLoadLocalData(xmlDatei, "initialisierung");
}
function progress(Wert)
{
document.getElementById("rahmenbalken").firstChild.nodeValue = Wert +" % des Fragenkatalogs geladen...";
document.getElementById("balken").style.width = Wert + "%";
alert("Ohne Mich sieht man nix ;(");
}
function initialisierung(strXML)
{
var xml;
xml = ""
+ "<?xml version="1.0"?>"
+ strXML;
progress(5);
liste_fuellen(xml, "fragetitel", "fragetitel", 1, "",5);
progress(10);
liste_fuellen(xml, "fragetyp", "fragetyp", 1, "",10);
progress(20);
liste_fuellen(xml, "punkte", "punkte", 1, "",20);
progress(30);
liste_fuellen(xml, "hinweis", "hinweis", 1, "",30);
progress(40);
liste_fuellen(xml, "erklaerung", "erklaerung", 1, "",40);
progress(50);
liste_fuellen(xml, "fragetext", "fragetext", 1, "",50);
progress(60);
liste_fuellen(xml, "antwort", "antworttext", 1, "",60);
progress(70);
liste_fuellen(xml, "antwort", "zufrage", 2, "zufrage",70);
progress(80);
liste_fuellen(xml, "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, xml_tag, liste, typ, attribut, prozent)
{
XML-Datei)
var objDom = new XMLDoc(xml, xmlError)
var objDomTree = objDom.docNode;
// Wird nach dem Tag oder nach
// alert("Und Los!");
var Elements = objDomTree.getElements(xml_tag);
var i=0;
do
{
var element = Elements[i];
if (element)
{
// Im Normalfall gehts um den Inhalt des Textes
var inhalt = element.getText();
// Aber wenn typ 2 angegeben wurde so werden die Attribute herausgezogen
if (typ==2)
{
// alert("Extra");
var referenceNode = element;
var attributeValue = referenceNode.getAttribute(attribut);
inhalt = attributeValue;
}
// Den Inhalt in die übergebene Liste eintragen
NeuerEintrag = new Option(inhalt, inhalt, false, true);
parent.teststeuerung.document.getElementById(liste).options[parent.teststeuerung.document.getElementById(liste).length] = NeuerEintrag;
i++;
}
else
{
inhalt = "";
}
// alert(inhalt);
} while(inhalt != "");
anzahl_elemente=i;
//progress(prozent);
// alert(anzahl_elemente);
}
Hoffe der Zugriff auf die XML-Attribute ist auch mit der Lösung von Matthias möglich.
Vielleicht hat ja einer von euch noch den Letzen Hinweis den ich benötige.
Danke
André