Archief - XML: / JS: Firefox geeft fout

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Dr33tN

Legacy Member
In Firefox en IE wordt eveneens niets ge output.
In IE kan ik wel via JavaScript stukjes data uit de XML halen.
In FF krijg ik de melding: x[0] heeft geen eigenschappen. regel 30
Nohthans dit script komt van een opensource site die beweert dat het crossbrowser is. Wat gaat er fout?
Alvast merci!

teamleden.htm
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	<script type="text/javascript" src="functions.js"></script>
	<title>Teamleden</title>
</head>
<body onload="importXML('teamleden.xml');">

<p id="writeroot">

</p>

</body>
</html>



teamleden.xml
Code:
<?xml version="1.0" ?>

<leden>
	<lid>
		<id>1</id>
		<nickname>user1</nickname>
		<password>pass1</password>
		<age>20</age>
	</lid>
	<lid>
		<id>2</id>
		<nickname>user2</nickname>
		<password>pass2</password>
		<age>21</age>
	</lid>
</leden>



functions.js
Code:
function importXML(xmlFile)
{
	if (document.implementation && document.implementation.createDocument)
	{
		xmlDoc = document.implementation.createDocument("", "", null);
		xmlDoc.onload = createTable();
	}
	else if (window.ActiveXObject)
	{
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.onreadystatechange = function () {
			if (xmlDoc.readyState == 4) createTable();
		};
 	}
	else
	{
		alert('Uw browser ondersteunt geen XML');
		return;
	}
	xmlDoc.load(xmlFile);
	document.write("XML met succes ingeladen!");
}


//Aanmaken van de Tabel met uitgelezen waarden.

function createTable()
{
	var x = xmlDoc.getElementsByTagName('lid');
	document.writeln(x[0].childNodes.length);
	var newEl = document.createElement('TABLE');
	newEl.setAttribute('cellPadding',5);
	var tmp = document.createElement('TBODY');
	newEl.appendChild(tmp);
	var row = document.createElement('TR');
	for (j=0;j<x[0].childNodes.length;j++)
	{
		if (x[0].childNodes[j].nodeType != 1) continue;
		var container = document.createElement('TH');
		var theData = document.createTextNode(x[0].childNodes[j].nodeName);
		container.appendChild(theData);
		row.appendChild(container);
	}
	tmp.appendChild(row);
	for (i=0;i<x.length;i++)
	{
		var row = document.createElement('TR');
		for (j=0;j<x[i].childNodes.length;j++)
		{
			if (x[i].childNodes[j].nodeType != 1) continue;
			var container = document.createElement('TD');
			var theData = document.createTextNode(x[i].childNodes[j].firstChild.nodeValue);
			container.appendChild(theData);
			row.appendChild(container);
		}
		tmp.appendChild(row);
	}
	document.getElementById('writeroot').appendChild(newEl);
}

TheCrow7

Legacy Member
Die MS DOM wordt bij mijn weten enkel door IE ondersteund.

dJeez

Legacy Member
Gooi al die document.write & document.writeln eens weg, die zijn nergens voor nodig. Wat je precies verknoeid hebt buiten dat is mij een raadsel, maar volgende code als "vervanging" van jouw functions.js werkt :
Code:
function importXML(xmlFile)
{
	if (document.implementation && document.implementation.createDocument)
	{
		xmlDoc = document.implementation.createDocument("", "", null);
		xmlDoc.onload = createTable;
	}
	else if (window.ActiveXObject)
	{
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.onreadystatechange = function () {
			if (xmlDoc.readyState == 4) createTable()
		};
 	}
	else
	{
		alert('Uw browser ondersteunt geen XML');
		return;
	}
	xmlDoc.load(xmlFile);
}

function createTable()
{
	var x = xmlDoc.getElementsByTagName('lid');
	var newEl = document.createElement('TABLE');
	newEl.setAttribute('cellPadding',5);
	var tmp = document.createElement('TBODY');
	newEl.appendChild(tmp);
	var row = document.createElement('TR');
	for (j=0;j<x[0].childNodes.length;j++)
	{
		if (x[0].childNodes[j].nodeType != 1) continue;
		var container = document.createElement('TH');
		var theData = document.createTextNode(x[0].childNodes[j].nodeName);
		container.appendChild(theData);
		row.appendChild(container);
	}
	tmp.appendChild(row);
	for (i=0;i<x.length;i++)
	{
		var row = document.createElement('TR');
		for (j=0;j<x[i].childNodes.length;j++)
		{
			if (x[i].childNodes[j].nodeType != 1) continue;
			var container = document.createElement('TD');
			var theData = document.createTextNode(x[i].childNodes[j].firstChild.nodeValue);
			container.appendChild(theData);
			row.appendChild(container);
		}
		tmp.appendChild(row);
	}
	document.getElementById('writeroot').appendChild(newEl);
}
Gewoon copy/paste van Quirksmode en aangepast waar nodig :p.

Dr33tN

Legacy Member
Vriendelijk bedankt!
Die document.writeln's daartussen waaren debug overblijfselen van mezelf.
BTW: Weet iemand hoe je een loginformuliertje maakt met dat xml bestand en wat javascript?
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan