1

mon pb est tout bête :

en javascript, je souhaite appeler un xml généré en php afin de modifié la page sur laquelle on se trouve afin de ne recharger que les données utiles à chaque action.

Je sais le faire sous IE :
- dans le html :
<xml id="tempData"></xml>
- dans le js :
function LireXml()
{
	var url = "mon_fichier.xml.php?quelques_paramètres"
	var xmlDoc = tempData.XMLDocument ;
	xmlDoc.async = false ;
	xmlDoc.resolveExternals = false;			
	tempData.load(url);
	
	var msgs = xmlDoc.selectNodes("ROOT/MESSAGES");
	var temp = new Array();
	
	if (msgs.length)
	{
		for (k=0;k<msgs.length;k++)
		{
			temp[k] = new Array();
			temp[k]["id"]		= msgs[k].selectSingleNode("ID").text;
			temp[k]["nom"]		= msgs[k].selectSingleNode("NOM").text;
			temp[k]["date"]		= msgs[k].selectSingleNode("DATE").text;
			temp[k]["msg"]		= msgs[k].selectSingleNode("MSG").text;
		}
	}
	
	return temp;
}


mais sous FireFox, je n'ai pas trouvé comment faire... quelqu'un aurait une idée, ou un site à m'indiquer ?
Ancien pseudo : lolo

2

au passage, je ne sais pas trop si j'aurais du mettre ce topic dans XML ou dans javascript... si un admin pense qu'il est au mauvais endroit, pas de pb, un petit déplacement hehe
Ancien pseudo : lolo

3

voila comment je charge du xml avec firefox :
 var request = new XMLHttpRequest();
request.onload = function() { parsereq(request); }
request.open("GET","gnagnagna.html");
request.send(null);

function parsereq(request) {
    var xml = request.responseXML;
  ...
}

4

bon, ben j'ai essayé et re-essayé, et chercher dans google, mais sans résultat : j'y arrive pas tsss sick

si quelqu'un pouvait me completer la fonction lire_xml_ff dans le fichier load_xml.js, ca me rendrait un grans service... mici !

juste un truc à savoir : le script _navigateur.js permet la gestion multinavigateur de tout ce qui est DIV. je ne l'ai pas mis ci-dessous car il est assez gros.

[font=130%]index.html[/font]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>Test de chargement XML</title>
		<meta name="Title"			content="Test de chargement XML" > 
		<meta name="Author"			content="Laurent Minguet , Spirou 45 Li 201" >
		<meta http-equiv="Content-Type"	content="text/html; charset=windows-1252" >
		<script type='text/javascript' language='javascript' src='./js/_navigateur.js'></script>
		<script type='text/javascript' language='javascript' src='./js/load_xml.js'></script>
	</head>
	<body>
		<H1 align="center">Test de chargement</H1>
		<div id='aff_xml'></div>
<script type='text/javascript'>
<!--
	AfficherXml();
-->
</script>
	</body>
</html>


[font=130%]exemple.xml.php[/font]

<?php
echo '<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?><ROOT>';

$nb = 5;
if (isset($_GET['nb']) && is_numeric($_GET['nb']) && $_GET['nb']>0) $nb = $_GET['nb'];
for ($k=1;$k<=$nb;$k++)
{
?>
	<MESSAGES>
		<ID><![CDATA[<?=$k 		?>]]></ID>
		<NB><![CDATA[<?=($k*$k) ?>]]></NB>
	</MESSAGES>
<?php
}
?>
</ROOT>


[font=130%]load_xml.js[/font]

    function lire_xml_ie(url) 
    { 
		var newxml = new ActiveXObject("Microsoft.XMLDOM"); 
    	newxml.async = false; 
    	newxml.load(url); 
		var msgs = newxml.selectNodes("ROOT/MESSAGES"); 
		var temp = new Array(); 
		 
		if (msgs.length) 
		{ 
			for (k=0;k<msgs.length;k++) 
			{ 
				temp[k] = new Array(); 
				temp[k]["id"]		= msgs[k].selectSingleNode("ID").text; 
				temp[k]["nb"]		= msgs[k].selectSingleNode("NB").text; 
			} 
		} 

		return temp;
    } 

	function lire_xml_ff(url)
	{
		var temp = new Array();
		
		alert(url);
		
		return temp;
 	}


	function AfficherXml()
	{
		var txt = "";
		var k=0;

		if(ie4)	liste = lire_xml_ie("xml/exemple.xml.php?nb=10");
		else	liste = lire_xml_ff("xml/exemple.xml.php?nb=10");
		
		for (k=0;k<liste.length;k++)
			txt+= "<tr><td>"+liste[k]["id"]+"</td><td>"+liste[k]["nb"]+"</td></tr>\n";
		
		Ecrire(Identifier("aff_xml"), "<table align='center' 
style='width:100px;text-align:center;border:blue solid 1px'>"+txt+"</table>");
	}
Ancien pseudo : lolo

5

personne ne peut m'aider à ecrire l'equivalent de la fontionc IE lire_xml_ie pour FireFox ?
Ancien pseudo : lolo

6

7

bon, ben j'arrive toujours pas...

j'ai pourtant un peu avancé :

		xmlDoc = document.implementation.createDocument("", "doc", null);
   		xmlDoc.load(url);
		result = xmlDoc.getElementsByTagName('ROOT');


quand je fait un alert sur result, il me renvoie bien un type OBJET HTML Collection
par contre, alors que mon xml possède bien un ROOT en principal, result.length vaut 0... comme si le xml était mal chargé (alors que le load me renvoi bien true)

je crissssse picol
Ancien pseudo : lolo

8

bon, ben suite à pas mal de recherche, j'ai réussi, mais il me reste quand meme un petit pb.

Voici les fait (pour ceux que ca interesse) :

Fonctions JS de traitement du XML

///////////////////////////////////
// Fonctions de gestion de l'XML //
///////////////////////////////////
function xmlLoad(url, fnc_load)
{
	if (window.ActiveXObject)
	{
		var xmlDoc	= new ActiveXObject("Microsoft.XMLDOM");
    	xmlDoc.async = false;  
		if (typeof xmlDoc!="undefined")
			xmlDoc.load(url)
 	   	while(xmlDoc.readyState != 4) {};
 		return xmlDoc;
	}
	else (document.implementation && document.implementation.createDocument)
	{
		var xmlDoc	= document.implementation.createDocument("","doc",null);
		if (typeof xmlDoc!="undefined")
			xmlDoc.load(url)
		eval("xmlDoc.onload = "+fnc_load);
		return xmlDoc;
	}
	return null;
}

function xmlInit(xmlDoc, fnc_load)
{
	if (window.ActiveXObject)
	{
		eval(fnc_load+"()");
	}
	else if (document.implementation && document.implementation.createDocument)
	{
		eval("xmlDoc.onload = "+fnc_load);
	}
	return true;
}

function xmlSelectNodes(xmlDoc, nom)
{
	return xmlDoc.getElementsByTagName(nom);
}

function xmlReadNode(xmlNode)
{
	var notWhitespace = /\S/;
	for (i=0;i<xmlNode.childNodes.length;i++)
	{
		if ((xmlNode.childNodes[i].nodeType == 3)&&(!notWhitespace.test(xmlNode.childNodes[i].nodeValue)))
		{
			xmlNode.removeChild(xmlNode.childNodes[i]);
			i--;
		}
	}
	
	var liste = new Array();
	for (i=0;i<xmlNode.childNodes.length;i++)
	{
		liste[i]			= new Array();
		liste[i]['name']	= xmlNode.childNodes[i].nodeName;
		liste[i]['value']	= xmlNode.childNodes[i].firstChild.nodeValue;
	}
	
	return liste;
}


fichier message.xml

<root>
<message>Test de chargement de XML</message>
<calcul>1 => 1</calcul>
<calcul>2 => 4</calcul>
<calcul>3 => 9</calcul>
<calcul>4 => 16</calcul>
</root>


fonctions d'appel du xml pour affichage

function init()
{
	var liste = xmlReadNode(xmlSelectNodes(xmlDoc, "root")[0]);
	var txt = "";
	for (i=0;i<liste.length;i++)
		txt+= i+" - "+liste[i]['name'] + " - "+liste[i]['value']+"<br>";
	
	Ecrire(Identifier("container"), txt); // ecris dans la div "container"
}

var xmlDoc = xmlLoad("message.xml");
xmlInit(xmlDoc, "init");


mon pb est le suivant :
ca marche impecable avec l'exemple ci-dessus. Par contre, si je prend pour XML un fichier généré par du php (du style message.xml.php) ben sous firefox, il ne me reconnait plus le fichier comme du XML et reffuse de l'interpreter, alors que ca marche sous IE...

quelqu'un aurait une idée ?
Ancien pseudo : lolo

9

t'as un bon entete ?

10

c bon, g réussi ^^

pour ceux que ca interesse :
Test XML
Ancien pseudo : lolo

11

j'ai également concu un mini chat utilisant l'XML :

WT Chat
Ancien pseudo : lolo

12

Je connais pas grand chose au javascript, mais tu saurais comment lire les parametre d'un noeud XML, par exemple, lire le champ value de:
<root>
  <t value="machin" />
</root>

13

getParametre, ca marche pas ?
sinon,si c'est un xml que tu créé, fait plutot
<root>
<t>machin</t>
</root>
Ancien pseudo : lolo

14

Orion>normalement, ca utilise l'API DOM, donc un getAttribute devrait suffire, non ?

Moi j'utilise cette doc : http://www.xulplanet.com/references/objref/Element.html

15

pardon, getAttribute que je voulais dire, lol
Ancien pseudo : lolo

16

Oki, merci, je vais plancher dessus

lolo: pour la forme que tu proposes du XML, je ne peux pas l'utiliser car le XML est ausi utilise par une application qui parser le XML a partir de cette forme la. (bon, oki, c de ma faute, mais bon, je pense que c plus rapide a parser comme ca...)

17

Bon, bah merci lolo je me suis pas mal aide de ton truc pour faire ce que je voulais, maintenant, j'ai:
- base de donnee en XML
- base affichee en XSLT et CSS
- un moteur de recherche sur cette base en javascript

Tout cote client love
Enfait, ca me permet d'avoir tout en local, pas besoin d'avoir un serveur etc. pour faire des recherches...

18

bon, ben temps mieu, je l'ai mis à dispo pour ca ^^
Ancien pseudo : lolo

19

mici oui