2010-12-14 5 views
1

Dans mon système, j'ai dû déplacer un grand système ajax javascript à couture. Je suis arrivé que pour travailler correctement en ajoutantjavascript parseFromString changement d'ordre des éléments dans xml doc

xml = (new DOMParser()).parseFromString(s, "text/xml"); 

maintenant mon problème est qu'il est venu juste mon attention que le DOMParser est pour une raison quelconque modification de l'ordre des éléments XML. ive l'a réduit, ça doit être ça. puisque ces éléments sont triés dans un ordre spécifique quand ils quittent le serveur, la réorganisation de dom parser n'est pas une bonne chose. quelqu'un a vu ça? Quelqu'un sait comment réparer ça?

Répondre

0

Pour toute personne qui est toujours d'avoir ce problème, je l'ai résolu en écrivant mon propre analyseur XML. J'ai arrêté d'utiliser DomParser tous ensemble et depuis cette fois, j'ai changé pour json qui n'a pas du tout le problème.

merci

+0

J'ai le même problème. Pouvez-vous me fournir une solution? –

0

Je serais extrêmement surpris si c'est le cas. L'ordre des nœuds est défini comme étant significatif en XML et je ne peux pas croire que l'implémentation de DomParser ne le respecterait pas. Je vous suggère de regarder à nouveau votre code.

+0

j'ai déjà, c'est très étrange. quand son mode en ajax et jquery renvoie un objet xmlresponse, c'est parfait. mais en mode couture, je dois l'analyser dans un document dom et quand je reçois le document dans un ordre différent. et dans les deux cas, le serveur envoie exactement le même xml en réponse. ive l'a vérifié de deux manières différentes. – scphantm

+0

Y at-il une page de test que vous pouvez publier? –

1

J'ai rencontré ce problème en mode Standards d'IE 9 RC 1 en essayant de contourner un autre problème (l'objet XMLHttpRequest renvoyant un objet ActiveX MSXML même en mode Standards.) La détection de fonction voit le DOMParser et les deux documents ne sont pas compatible donc je me suis à l'aide du DOMParser ferait l'affaire)

Exemple de code qui reproduit la question dans IE 9 RC 1:

var sXML = "<TEST ID=\"124\" TITLE=\"TitleValue\" DATE=\"2011-02-24T00:00:00\" STATUS=\"Processing\" EMPNAME=\"Smith, Sam\" STATUSCODE=\"P\" ROWNUM=\"1\" />"; 

var dpParser = new DOMParser(); 
var xdDoc = dpParser.parseFromString(sXML, "text/xml"); 

var xsSerialize = new XMLSerializer(); 
var sNewXML = xsSerialize.serializeToString(xdDoc); 

alert("Original XML:\n" + sXML + "\n\nNew XML:\n" + sNewXML); 

sortie de l'alerte ...

XML d'origine:

<TEST ID="124" TITLE="TitleValue" DATE="2011-02-24T00:00:00" STATUS="Processing" EMPNAME="Smith, Sam" STATUSCODE="P" ROWNUM="1" /> 

Nouveau XML:

<TEST ROWNUM="1" STATUSCODE="P" EMPNAME="Smith, Sam" STATUS="Processing" DATE="2011-02-24T00:00:00" TITLE="TitleValue" ID="124" /> 

Mise à jour: j'avais déposé un rapport de bogue avec Microsoft pour IE 9 en ce qui concerne cette question et ils ont résolu comme 'la conception'.

Si vous attendez vos attributs XML dans un certain ordre lors de l'utilisation de la fonction DOMParser.parseFromString dans IE 9, vous voudrez saisir les attributs explicitement plutôt que simplement les parcourir.

Ce qui suit est le rapport de bogue: https://connect.microsoft.com/IE/feedback/details/645091/domparser-parsefromstring-in-ie-9-rc-1-rearranges-the-attributes-of-the-xml-node-passed-in

+0

hey, le lien ne fonctionne pas pour moi. :) – mlsteeves

+0

Est-ce le DOMParser qui réorganise votre xml, ou le XmlSerializer? – mlsteeves

+0

Le lien fonctionne, mais vous devez vous inscrire avec Microsoft Connect et ils vous obligent à remplir un court sondage avant de pouvoir voir l'un des bugs ... C'est le DOMParser qui réorganise les attributs (j'ai passé en mode débogage à assurez-vous - iterer sur la collection d'attributs en utilisant l'index montrera aussi cela) –