Insertion d'un fichier xml dans un fichier html

Bonjour, je voudrai inserrer un fichier xml, formater avec un fichier xsl, dans un fichier html.

Un insertion du style include en php.

Es ce que cela est possible?

merci

bon alors si on ne peu pas include directement, on peu peu etre utiliser un parser.

Donc j’ai trouvé un parser javascript, mais comme je suis débutant, je n’arrive pas a parcourir mon fichier entier.

<html>
<head>
<script type="text/javascript">
var xmlDoc;
function loadXML()
{
// code for IE
if (window.ActiveXObject)
  {
  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async=false;
  xmlDoc.load("lesecho.xml");
  getmessage();
  }
// code for Mozilla, Firefox, [Opera](http://www.clubic.com/telecharger-fiche18773-opera.html), etc.
else if (document.implementation &&
document.implementation.createDocument)
  {
  xmlDoc=document.implementation.createDocument("","",null);
  xmlDoc.load("lesecho.xml");
  xmlDoc.onload=getmessage;
  }
else
  {
  alert('Your browser cannot handle this script');
  }
}

function getmessage()
{
	for (var i = 0; i < 10; i++) {
  document.getElementById("titre").innerHTML=
  xmlDoc.getElementsByTagName("titre")[i].childNodes[i].nodeValue;
	}
}
</script>
</head>

<body onload="loadXML()">
<h1>W3Schools Internal Note</h1>
<p><b>Titre:</b> <span id="titre"></span><br 
</p>
</body>
</html?gt;

avec un xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="xslt.xsl" type="text/xsl"?>

<!DOCTYPE dynamic SYSTEM "liste.dtd">
<source>
	<dateXmlCreation>1171617284</dateXmlCreation>
	<nom>lesEchos</nom>
	<article>
  <idArticle>63316</idArticle>
  <titre>Paris renforce son image de ville sportive</titre>
  <auteur>ALAIN ECHEGUT</auteur>
  <nameFile>45D56B3C.PDF</nameFile>
  <dateArticle>16/02/2007</dateArticle>
  <dateMontage>09:33:02</dateMontage>
	</article>
	<article>
  <idArticle>63282</idArticle>
  <titre>Les g&#xE9;ants de l'Internet &#xE0; l'assaut du t&#xE9;l&#xE9;phone mobile</titre>
  <auteur>JAMAL HENNI</auteur>
  <nameFile>45D551F3.PDF</nameFile>
  <dateArticle>16/02/2007</dateArticle>
  <dateMontage>07:45:04</dateMontage>
	</article>
.......

j’affiche bien le premier titre mais pas les autre, j’ai essayé de faire une boucle for dans la fonction getmessage mais rien a faire…

qq’un a une idée?

Normal. Node.getElementsByTagName() ne récupère que les éléments du noeud Node. Donc tu ne récupéreras pas les noeuds des éléments articles, juste ceux de source.

Doit y avoir des docs sur google sur getElementByTagName, et sur comment parcourir un tableau en javascript

xmlDoc.getElementsByTagName("article")[i].firstChild.nodeValue ?

Plutôt :

for (i = 0, nodeList = xmlDoc.getElementsByTagName('article');
      i < nodeList.length; ++i) {
  var innerNodeList = nodeList[i].getElementsByTagName('title');

  for (j = 0; j < innerNodeList.length; ++j) {
    alert(innerNodeList[j].nodeValue);
  }

}

Je crois que nodeValue fonctionne pas sous IE, à vérifier.

Sisi ca marche sous IE.

alors voici ce que j’ai fait… mais ca ne fonctionne que sur firefox, pas sous IE, une idée?

<script type="text/javascript">
var xmlDoc;

// code for IE
if (window.ActiveXObject){
  xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  xmlDoc.async=false;
  xmlDoc.load("lesecho.xml");
  var oXsl = new ActiveXObject("Microsoft.XMLDOM");
  oXsl.async = false;
  oXsl.load("xslt.xsl");
  strRet = xmlDoc.transformNode(oXsl);
  getmessage();
 }
// code for Mozilla, Firefox, [Opera](http://www.clubic.com/telecharger-fiche18773-opera.html), etc.
else if (document.implementation && document.implementation.createDocument){
  xmlDoc=document.implementation.createDocument("","",null);
  xmlDoc.load("lesecho.xml");
  xmlDoc.onload=getmessage;
  }
else
  {
  alert('Your browser cannot handle this script');
  }


function getmessage()
{
	INNER="";
	if (!xmlDoc) 
  return 0;
  	if ((!'article') || ('article'=="")) 
  return 0;
  	var elts=xmlDoc.getElementsByTagName('article');
	for (var i = 0; i< parseInt(elts.length); i++) {
  TITRE=xmlDoc.getElementsByTagName('titre')[i].childNodes[0].nodeValue;
  ID=xmlDoc.getElementsByTagName('idArticle')[i].childNodes[0].nodeValue;
  DTE=xmlDoc.getElementsByTagName('dateArticle')[i].childNodes[0].nodeValue;
  INNER +="<li id="+ID+">"+i+") "+TITRE+"<font color=red>"+DTE+"</font></li>";
	}
	document.getElementById("arrangableNodes").innerHTML=INNER;
}
</script>

<ul id="arrangableNodes">

Utilise firstChild.nodeValue à la place de childNodes[0] ca réglera peut etre ton problème.

Non. Il y a aucune probabilité pour que ça marche.

TITRE=xmlDoc.getElementsByTagName(‘titre’)[i].childNodes[0].nodeValue;

Cela va prendre tous les éléments titre à la racine du document XML, soit l’élément source.

Et pire encore : tu fais une opération lourde à chaque fois, pour accéder à l’élément i…

Reprend l’exemple que je t’ai donné, car pour ce qui concerne l’élément titre il est bon.

Si ça marche, alors j’ai des doutes sérieux quant au résultat :slight_smile:

Et bien ecoute, j’ai mi ton code, mais la, plus rien ne s’affiche !!! donc je me suis peu etre planté alors voila ce que ca donne:

<html>
<head>
<script type="text/javascript">
function loadXML(){
	var xmlDoc;

	// code for IE
	if (window.ActiveXObject){
  	xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
  	xmlDoc.async=false;
  	xmlDoc.load("lesecho.xml");
  	var oXsl = new ActiveXObject("Microsoft.XMLDOM");
  	oXsl.async = false;
  	oXsl.load("xslt.xsl");
  	strRet = xmlDoc.transformNode(oXsl);
  	getmessage();
	}
	// code for Mozilla, Firefox, [Opera](http://www.clubic.com/telecharger-fiche18773-opera.html), etc.
	else if (document.implementation && document.implementation.createDocument){
  	xmlDoc=document.implementation.createDocument("","",null);
  	xmlDoc.load("lesecho.xml");
  	xmlDoc.onload=getmessage;
  }
	else{
  	alert('Your browser cannot handle this script');
  }
} 

function getmessage(){
	INNER="";
  for (i = 0, nodeList = xmlDoc.getElementsByTagName('article');i < nodeList.length; ++i) {
  	var innerNodeList = nodeList[i].getElementsByTagName('title');
  for (j = 0; j < innerNodeList.length; ++j) {
      TITRE=innerNodeList[j].nodeValue;
  	INNER +="<li>"+TITRE+"</li>";
  	}
 
	}
	document.getElementById("arrangableNodes").innerHTML=INNER;
}

</script>
</head>

<body onload="loadXML()">
<p><span id="arrangableNodes"></span><br>
</p>
</body>
</html>

une idée?

Oui. Dans le cas ie tu fais :

getmessage();

Sauf que par rapport au contexte, xmlDoc n’existe pas. Faut repasser le var xmlDoc avant la fonction loadXML, ou le retourner et faire directement appel à getmessage.