Bonjour,

Je n'y comprend rien, j'ai tenté simplement de parser un fichier XML et il se trouve que ça ne fonctionne pas, sauf si je met window.alert().

Code HTML:
<html>
	<head>
		<script type="text/javascript">
var xmlParser = null;
if(document.implementation && document.implementation.createDocument)
	xmlParser = document.implementation.createDocument('', '', null);
if(!xmlParser)
	window.alert("pas de parser xml");

var testXml = {
	"init": function(elt, dataFile) {
		xmlParser.load(dataFile);

		//window.alert("inutile");
		
		var module = xmlParser.getElementsByTagName("Module");

		if(!module) {
			window.alert("pas de module");
			return;
		}

		if(module.length == 0) {
			window.alert("pas de fils");
			return;
		}

		var content = module[0].getElementsByTagName("Content");
		var textNode = document.createTextNode(content[0].textContent);
		elt.appendChild(textNode);
	}
};
		</script>
	</head>
	<body>
		<div id="test">
			<script type="text/javascript">testXml.init(document.getElementById("test"), "data.xml");</script>
		</div>
	</body>
</html>


Fichier XML (très simple, pris de l'exemple Hello World de widget de Google):
<?xml version="1.0" encoding="UTF-8" ?> 
<Module>
  <ModulePrefs title="hello world example" /> 
  <Content type="html">
     <![CDATA[ 
       Hello, world!
     ]]>
  </Content> 
</Module>


Si vous décommentez la ligne "window.alert("inutile");", ça marchera...
Je test avec Firefox 3.5.6, sur Linux (Ubuntu)

A l'aide... ça n'a plus aucun sens! Smiley sweatdrop
Modifié par Creak (20 Dec 2009 - 17:12)
J'ai trouvé!!! Fracking asynchronisation!
Alors, la solution c'est d'attendre le onload du document qui charge le fichier xml.
J'en ai profité pour architecturer le widget, y ajouter le titre au dessus du contenu et de leur donner des nom de classe CSS.

Ca donne donc ceci:
<html>
	<head>
		<style type="text/css">
div.widget {
	width: 300px;
	border: 1px solid black;
}

div.widget div.title {
	font-variant: small-caps;
	background-color: silver;
}

div.widget div.content {
	color: gray;
}
		</style>
		
		<script type="text/javascript">
var docXml = null;
if(document.implementation && document.implementation.createDocument)
	docXml = document.implementation.createDocument('', '', null);
if(!docXml)
	window.alert("pas de parser xml");

var testXml = {
	"element": null,
	
	"init": function(elt, dataFile) {
		docXml.addEventListener("load", testXml.render, false);
		docXml.load(dataFile);
		testXml.element = elt;
	},
	
	"render": function(e) {
		var module = docXml.getElementsByTagName("Module");

		if(!module || module.length == 0) {
			window.alert("No Module tag.");
			return;
		}

		var modulePrefs = module[0].getElementsByTagName("ModulePrefs");
		var titleNode = document.createTextNode(modulePrefs[0].getAttribute("title"));
		var titleElt = document.createElement("div");
		titleElt.className = "title";
		titleElt.appendChild(titleNode);
		testXml.element.appendChild(titleElt);

		var content = module[0].getElementsByTagName("Content");
		var contentNode = document.createTextNode(content[0].textContent);
		var contentElt = document.createElement("div");
		contentElt.className = "content";
		contentElt.appendChild(contentNode);
		testXml.element.appendChild(contentElt);	
	}
};
		</script>
	</head>
	<body>
		<div id="test" class="widget">
			<script type="text/javascript">testXml.init(document.getElementById("test"), "data.xml");</script>
		</div>
	</body>
</html>