webForumDet fria alternativet

läsa in xml

1 svar · 427 visningar · startad av PollyJuice

PollyJuiceMedlem sedan mars 2006124 inlägg
#1

Hej, behöver lite hjälp med en grej... javascriptet ska läsa in ett xml-dokument och presentera data i tabell-form, men det händer ingenting - misstänker att den ine hittar xml-filen, trots att den ligger i samma katalog. Eller har jag missat något?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Hejsan</title>
<script type="text/javascript">
function importXML()
{
	if (document.implementation && document.implementation.createDocument)
	{
		var 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('Your browser can\'t handle this script');
		return;
	}
	xmlDoc.load("lab2.xml");
document.write("Hej");
}

function createTable()
{
	var x = xmlDoc.getElementsByTagName('sat');
	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);
	
}
</script>
</head>
<body>

<p id="writeroot"></p>

<form id="hej">
<input type=button id="starta" value="Klicka här" onclick="importXML()";/>
</form>
</body>
</html>
MorphMedlem sedan juli 2000534 inlägg
#2

Du skapar ju xmlDoc-objektet i importXML() (dessutom bara inuti första if-satsen), vilket gör att du inte kan referera till det namnet i createTable. Du kan göra xmlDoc till en global variabel (genom att deklarera den utanför funktionen) men det är bättre att använda "this" istället, så här:

function importXML()
{
	[B]var xmlDoc;[/B]
	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('Your browser can\'t handle this script');
		return;
	}
	xmlDoc.load("lab2.xml");
}
function createTable()
{
	var x = [B]this[/B].getElementsByTagName('sat');
	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);
	
}
125 ms totalt · 3 externa anrop · v20260731065814-full.3ab8d573
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)