2010-09-06 12 views
1

Ce sujet a déjà été abordé, mais il y a quelque temps depuis la dernière question concernant la gestion des espaces de noms.Analyseur Javascript par navigateur croisé pour XML avec espace de noms

Existe-t-il une solution multi-navigateur pour obtenir les éléments par leur nom en Javascript?

<?xml version="1.0" encoding="UTF-8"?> 
<NS:response success="1" xmlns:NS="http://someURI/ns"> 
    <NS:user firstname="foo" lastname="bar"></NS:user> 
    <NS:cookie value="2c0ea35bcac2e05d439609367a236b28" name="session"></NS:cookie> 
</NS:response> 

Jusqu'à présent, ce que j'ai:

var oXML = (new DOMParser()).parseFromString(xmlstring, "text/xml"); 
var root = oXML.documentElement; 
var user = typeof(user=root.getElementsByTagName(root.prefix + ':user')[0]) === "undefined" 
       ?root.getElementsByTagName('user')[0] 
       :user; 

n'a pas été testé dans IE, mais si quelqu'un a une solution multi-navigateur, je serais prêt à entendre.

Autres considérations:

  • getElementsByTagNameNS() - essaie d'éviter d'avoir à spécifier l'espace de noms/uri
  • utilisant l'expression rationnelle pour enlever l'espace de noms avant de créer le document XML
  • ne pas utiliser un namespace - J'ai cette option, mais je ne voudrais pas aller sur cette route
+1

* DOMParser() * ne fonctionnera certainement pas dans IE, vous devrez passer à la [route ActiveX/MSXML] (http://erik.eae.net/archives/2005/07/03/20.19. 18 /). –

+0

+1. Je m'en souviens, mais ce n'est pas un problème, il est facile de coder autour de ça; Si 'object.documentElement' n'est pas un navigateur croisé, ce serait un gros problème :) – vol7ron

Répondre

1

Vous pouvez essayer une autre approche, en convertissant le XML en serveur JSON, en utilisant un XSLT générique comme http://code.google.com/p/xml2json-xslt/, et de livrer au navigateur uniquement JSON.

Cela ajoutera une petite surcharge sur la réponse du serveur, mais rien comparé à la quantité de code et le temps passé sur le navigateur pour rendre XML. À l'exception de IE, avec son impressionnant msxml, je pense que la lecture de XML dans les navigateurs courants est une vraie douleur par rapport à JSON.

+0

Je suis en train de créer le côté serveur XML, donc je suppose que je commencerais avec JSON au lieu de devoir le convertir. J'utilise le XML dans le cadre de l'authentification Web. Puisque j'ai le contrôle sur l'entrée, je pourrais facilement retourner un ASCII délimité sans aucun balisage, mais je n'ai vraiment pas eu besoin d'utiliser le XML Dom dans un certain temps, donc c'est un nouveau projet :) – vol7ron

+0

Applications Web basées sur XML/XSLT pour plus de 10 ans. Quand je suis passé à JSON c'était une libération et je ne reviendrais pas pour rien. La messagerie ASCII n'est pas idéale, car elle casse généralement votre code lorsque vous modifiez le message, tandis que XML et JSON, tant que vous ajoutez des éléments, l'ancien code continue de fonctionner comme prévu. – Mic

0

En utilisant un framework JS comme jQuery ou Pro totype pour ce genre de scripts ajax aiderait. Vous pouvez également faire (exemple) $("user[name=foo]") qui va sélectionner toutes vos balises utilisateur avec name = foo. C'est une solution que de nombreux utilisateurs ont réussi à faire pour gérer la sélection des éléments par leur nom. Et $("tag[name=foo]") est crossbrowser.