Bonjour,

voila mon code il marche nikel sous ie , par contre sous firefox(version 1.5.0.4) si je met un alert (dans la fonction goto) avant l appele a la fonction transform mais si j enleve ce alert ca marche pas .

Quelqu'un a une idée ?
merci

<html>
  <head>
    <title>Transformation XSLT</title>
    <script type="text/javascript">
  function loadXML(url)
  {
	var xmlDoc;
   // chargement du fichier XML 
	try {
	  // navigateur basé sur Gecko
	  if (document.implementation && document.implementation.createDocument)
	  {
		xmlDoc = document.implementation.createDocument('', '', null);
		xmlDoc.load(url);
	  // ActiveX pour Internet Explorer
	  } else if (window.ActiveXObject) {
		try {
		  xmlDoc = new ActiveXObject('Msxml2.XMLDOM');
		} catch (e) {
		  xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
		}
		xmlDoc.async = false;
		xmlDoc.load(url);
	  // à l'aide de lobjet XMLHTTPRequest
	  } else if (window.XMLHttpRequest) {
		xmlDoc = new XMLHttpRequest();
		xmlDoc.overrideMimeType('text/xml');
		xmlDoc.open('GET', url, false);
		xmlDoc.send(null);
		if (this.xmlDoc.readyState == 4) xmlDoc = xmlDoc.responseXML;
	  }
	} catch (e) {
	  return e;
	}
	return xmlDoc;
  }

function transform(xml, xsl, id)
{
	try {
	  // navigateur basé sur Gecko
	  if (window.XSLTProcessor)
	  {
		var fragment;
		var xsltProcessor = new XSLTProcessor();
		xsltProcessor.importStylesheet(xsl);
		fragment = xsltProcessor.transformToFragment(xml, document);
		var target = document.getElementById(id);
		
		/*
		
		doc = processor.transformToDocument(xmlDoc);
		var xmls = new XMLSerializer();
		alert(xmls.serializeToString(doc));
		target.innerHTML = xmls.serializeToString(doc);
		*/
		target.appendChild(fragment);
		document.appendChild(target);

	  // ActiveX pour Internet Explorer
	  } else if (window.ActiveXObject) {
		var target = document.getElementById(id);
		target.innerHTML = xml.transformNode(xsl);
	  }
	} catch (e) {
	  return e;
	}
}

function goto()
{
	var artisteURL = 'test.xml';
	var paroleURL = 'xml.xsl';
	var xml = loadXML(artisteURL);
	var xsl = loadXML(paroleURL);
	//pb sous firefox
	alert("");
	transform(xml, xsl, 'transform');
}

</script>
</head>
<body >
<input type="button" onclick="goto();" id="titi" value="tesxte"></input>
<h1>Test</h1>
<div id="transform">
</div>
Toto
</body>
</html>

Modifié par dragonix (13 Jun 2006 - 22:02)
Bonjour,
Je n'ai pas trouvé la réponse à ce problème. J'ai seulement un solution moins élégante qui marche pour firefox et IE. Une seule fonction javascript appellée. Le problème semble lié à l'appel des fonctions (portée des variables, bug firefox....???) . Merci d'être indulgent avec ce code, je suis débutant javascript.

Fichier HTML:
<html>
<head>
<title>ESSAI</title>

<style>
p { font-family: verdana; font-weight: bold; font-size : 12pt; }
th { font-family: Verdana; font-weight: bold; font-size : 10pt; }
td { font-family: Verdana; font-weight: bold; font-size : 8pt;}
</style>

<script type = "text/javascript">
///////////////////////////////////
function Init(id,xsl,xml){

	try {
	  if (window.XSLTProcessor && window.XMLHttpRequest)
	  {
		  var xmlDoc;
		  var xslStylesheet;
		  var xsltProcessor = new XSLTProcessor();

		  // load the xslt file, example1.xsl
		  var myXMLHTTPRequest = new XMLHttpRequest();
		  myXMLHTTPRequest.open("GET", xsl, false);
		  myXMLHTTPRequest.send(null);

		  xslStylesheet = myXMLHTTPRequest.responseXML;
		  xsltProcessor.importStylesheet(xslStylesheet);

		  // load the xml file, example1.xml
		  myXMLHTTPRequest = new XMLHttpRequest();
		  myXMLHTTPRequest.open("GET", xml, false);
		  myXMLHTTPRequest.send(null);

		  xmlDoc = myXMLHTTPRequest.responseXML;

		  var target = document.getElementById(id);
		  var doc = xsltProcessor.transformToDocument(xmlDoc);
		  var xmls = new XMLSerializer();
		  target.innerHTML = xmls.serializeToString(doc);

	  // ActiveX pour Internet Explorer
	  } else if (window.ActiveXObject) {
 	    var xmlDoc;
 	    var xslDoc;

		try {
		  xmlDoc = new ActiveXObject('Msxml2.XMLDOM');
		} catch (e) {
		  xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
		}
		try {
		  xslDoc = new ActiveXObject('Msxml2.XMLDOM');
		} catch (e) {
		  xslDoc = new ActiveXObject('Microsoft.XMLDOM');
		}

		xmlDoc.async = false;
		xmlDoc.load(xml);

		xslDoc.async = false;
		xslDoc.load(xsl);

		var target = document.getElementById(id);
		target.innerHTML = xmlDoc.transformNode(xslDoc);
	  }
	} catch (e) {
	  return e;
	}

}
</script>
</head>
<body onload="Init('transform','test21.xsl','test2.xml');">
<div id="transform">
</div>
</body>
</html>



Fichier xml:
<?xml version="1.0"?>
<traducteur>
<mot color="blue">
<francais>Bleu</francais>
<english>Blue</english>
<italiano>Azzurro</italiano>
</mot>
<mot color="red">
<francais>Rouge</francais>
<english>Red</english>
<italiano>Rosso</italiano>
</mot>
<mot color="green">
<francais>Vert</francais>
<english>Green</english>
<italiano>Verde</italiano>
</mot>
</traducteur>

Fichier xsl:
<?xml version="1.0"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0">
<xsl:output method="html" indent="yes" version="4.0"/>

<xsl:template match="/">

<html>
<style>
p { font-family: verdana; font-weight: bold; font-size : 12pt; }
th { font-family: Verdana; font-weight: bold; font-size : 10pt; }
td { font-family: Verdana; font-weight: bold; font-size : 8pt;}
</style>
<body>
<p> Traducteur 21</p> 
<table width="300" border="1">
<TR>
<TH>Francais</TH>
<TH>English</TH>
<TH>Italiano</TH>
</TR>
<!-- la balise ci-dessous utilise une methode XSL xsl:for-each permettant d'appliquer la suite d'instructions encadrees par <xsl:for-each...></xsl:for-each> a chaque element XML decrit par l'attribut select ainsi cela permet d'introduire des notions de recursivite -->
<xsl:for-each select="traducteur/mot">
<!-- la balise <xsl:value-of> permet ici de recuperer le texte contenu a l'interieur des elements francais, english et italiano -->
<xsl:variable name="tstcol"><xsl:value-of select="@color"/></xsl:variable>
<tr>
<td style="color:{$tstcol}"><xsl:value-of select="francais"/></td>
<td style="color:{$tstcol}"><xsl:value-of select="english"/></td>
<td style="color:{$tstcol}"><xsl:value-of select="italiano"/></td>
</tr>
<!-- Une feuille de style XSL est un document XML donc toute balise ouvrante est associee a une balise fermante -->
</xsl:for-each>
</table>
</body>
</html>

</xsl:template>
</xsl:stylesheet>


<modération>Merci de baliser tes codes avec [ code] pour une meilleure lisibilité, comme ci-dessus après correction de ton message</modération>


Smiley confused Smiley lol
Modifié par Laurent Denis (21 Aug 2006 - 13:42)