XML-Datei mit Ajax parsen - Probleme mit Safari und Rückgabewert

Michael_K

Mitglied
Hallo,

ich möchte eine XML-Datei mit folgendem Aufbau mit Javascript einlesen und letztendlich ein Array erhalten, in dem jedem Dateinamen seine ID zugeordnet wird:
Code:
<files>
	<file>
		<id>1</id>
		<name>datei1.php</name>
	</file>
	<file>
		<id>2</id>
		<name>datei2.php</name>
	</file>
	<file>
		<id>3</id>
		<name>datei3.php</name>
	</file>
</files>
Zu diesem Zweck habe ich zwei Funktionen einem Tutorial meinen Wünschen entsprechend nachempfunden:
Code:
var xmlDoc;
function loadXML(XMLfile) {
	// IE
	if (window.ActiveXObject) {
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.load(XMLfile);
		printFiles();
	}
	// andere Browser
	else {
		xmlDoc = document.implementation.createDocument("", "", null);
		xmlDoc.load(XMLfile);
		xmlDoc.onload = printFiles;
	}
}


function printFiles() {
	var idNodes = xmlDoc.getElementsByTagName("id");
	var nameNodes = xmlDoc.getElementsByTagName("name");
	var filesArray = new Array();

	for (var i = 0; i < nameNodes.length; i++) {

		filesID = idNodes[i].firstChild.nodeValue;
		filesName = nameNodes[i].firstChild.nodeValue;
		
		filesArray[filesID] = filesName;
	}
}

Im Firefox, Opera und hoffentlich auch IE (konnte ich bislang nicht testen) klappt alles einwandfrei - nur Safari verweigert den Dienst. Weiß jemand, was ich ändern muss, damit auch in diesem Browser alles wie gewünscht läuft?

Mein zweites Problem ist wahrscheinlich banal, ich finde aber trotzdem keine Lösung.
Die Funktion loadXML() (und somit ja auch printFiles()) wird normalerweise aus einer dritten Funktion heraus aufgerufen. Diese soll anschließend das Array filesArray zurückerhalten, um es weiter zu verarbeiten.
Hier scheitert es an meinem Wissen. Ein return filesArray; in printFiles() nutzt nicht viel, da die Funktion ja nicht so aufgerufen wird, dass loadXML() das Array weiterverwenden könnte.
Wie kann ich den Inhalt von filesArray in dieser dritten Funktion verfügbar machen?

Gruß
Michael
 
Zurück