Hello à tous,

j'ai un petit souci d'interprétation de code XML en Javascript.
Voici la structure basique de mon xml :
<?xml version="1.0" encoding="iso-8859-1"?>
<root>
	<category1>
		<item>
			<name><![CDATA[name 1]]></name>
			<url><![CDATA[http://www.site1.com]]></url>
		</item>
		<item>
			<name><![CDATA[name 2]]></name>
			<url><![CDATA[http://www.site2.com]]></url>
		</item>
	</category1>
	<category2>
		<item>
			<name><![CDATA[name 1]]></name>
			<url><![CDATA[http://www.site1.com]]></url>
		</item>
		<item>
			<name><![CDATA[name 2]]></name>
			<url><![CDATA[http://www.site2.com]]></url>
		</item>
	</category2>
</root>

Edit: les CDATA sont là parce que mes urls et noms vont contenir des caractères "&", "?", "<", etc.

Lorsque j'essaie d'afficher, l'interprétation des nodes est différent selon IE et FF. Par exemple, ceci, dans mon js, :
var doc = xhr.responseXML;//le xml est appelé par XMLHttpRequest
var element = doc.getElementsByTagName('root').item(0);
alert(element.firstChild.nodeName;)

Va bien donner "category1" avec IE, mais firefox m'affiche "#text" !!

Si je supprime tous les sauts de ligne et indentations (tab) dans le code du xml, là les 2 navigateurs affichent bien "category1".

J'ai essayé de passer le fichier XML en UTF-8, ISO... rien à faire...

Là je bute, quelqu'un aurait une idée ?
Merci beaucoup !
Modifié par yyoupla (31 Oct 2008 - 16:31)
C'est compréhensible, puisque le premier noeud enfant de root est un noeud de type texte... à savoir ton retour chariot+tabulation.

Il te suffit de faire un test pour éviter de sélectionner les noeuds de type texte, et cela devrait être bon (par exemple, tu peux faire une boucle sur tes éléments de tableau tant que l'élément est un noeud de type texte, et en sortir sinon...). Utilise la propriété nodeType pour cela.

En passant et par simple curiosité, pourquoi utilises-tu doc.getElementsByTagName('root').item(0) et pas doc.getElementsByTagName('root')[0] ?
Compréhensible...?
Les retours chariot et indentations ne sont pas censés être ignorés, comme dans n'importe quel document html ?
Ça me parait étrange, tout de même...
C'est bien la première fois que je vois ça.

Ça voudrait dire que même pour ça, il faudrait faire une boucle pour les différents navigateurs ?
Fichtre...

Pour ta 2e question, oui en effet, ça revient au même, mais en plus court.
Modifié par yyoupla (03 Nov 2008 - 11:44)
L'extrait de la recommandation XML sur les espaces fait simplement obligation aux processeurs XML d'ignorer ces espaces... mais rien n'est dit sur la gestion par ce qui n'est pas un processeur XML, ici JavaScript... Je n'ai pas le temps de me plonger dans la doc ECMAScript pour en avoir le coeur net...
Modifié par Gilles (03 Nov 2008 - 16:48)
Oui, le fait d'ignorer les espaces, retours chariots et indentations semble logique, quel que soit le processeur XML.
Ce qui est inhabituel c'est que cela soit le moteur JS d'IE qui interprete "correctement" et celui de FF non...


La doc d'ECMAScript - 262 (trouvée ici), spécifie :

a écrit :
7.2 White Space

White space characters are used to improve source text readability and to separate tokens (indivisible lexical units) from each other, but are otherwise insignificant. White space may occur between any two
tokens, and may occur within strings (where they are considered significant characters forming part of the
literal string value), but cannot appear within any other kind of token.

The following characters are considered to be white space:
(Code Point Value - Name - Formal Name)

\u0009 - Tab - <TAB>
\u000B - Vertical Tab - <VT>
\u000C - Form Feed - <FF>
\u0020 - Space - <SP>
\u00A0 - No-break space - <NBSP>
Other category “Zs” - Any other Unicode “space separator” - <USP>


Ce qui est bien le cas pour le javascript, mais pas pour l'interprétation du XML par Firefox.
Modifié par yyoupla (04 Nov 2008 - 15:29)