52 votes

Comment gérer les services XML dans AngularJS?

Mon entreprise a des milliers de les services web xml et commence à adopter angularjs pour de nouveaux projets.

Le tutoriel sur au http://angularjs.org/ utilise json services exclusivement. On dirait qu'ils font un appel de service dans le contrôleur, analyser l'résultant json, et de passer l'objet résultant directement de la vue.

Que dois-je faire avec XML? Je vois quatre options:

  1. Analyser et les transmettre à l'objet dom directement à l'INTERFACE utilisateur(vue).

  2. Mettre un json wrapper autour de mon xml services sur le serveur.

  3. convertir les dom objet json avec une bibliothèque sur le côté client et de le convertir en arrière quand je fais le post/put demandes.

  4. Convertir les dom objet à l'objet javascript manuellement sur le côté client.

Ce que l'approche correcte et pourquoi?

Merci!

34voto

Jollymorphic Points 2832

Si l'option 2 est relativement facile pour vous (comme l'ajout d'une ligne JSON conversions dans votre back-end contrôleurs, par exemple), alors il est probablement un bon investissement, comme le JSON est plus maigre sur le fil, beaucoup moins de travail sur le côté client et généralement préféré par les API RESTful les consommateurs (dans le cas où il y a d'autres consommateurs).

Ayant récemment fait ce genre de travail, je dirais que le meilleur chemin (si l'option 2 est difficile) serait d'utiliser la réponse et la demande des transformateurs pour effectuer des conversions entre XML et les objets JavaScript, qui est une variante quelque part entre vos options 3 et 4. Le DOMParser objet est en code natif, donc il analyse XML beaucoup rapide. La transformation du XML DOM de JavaScript objets et de générer un document XML à partir d'objets JavaScript sont à la fois assez simple d'algorithmes récursifs. Cette approche dissocie tout le reste de votre code côté client à partir de la fin de la représentation, qui ne serait pas le cas si vous êtes allé avec votre option 1. Un tel découplage vous permettra d'utiliser directement un basé sur JSON interface RESTful, si une telle occasion se présente.

En sélectionnant l'option qui consiste à JSON/JavaScript les objets impliquent souvent de traiter avec les différences d'impédance des questions comme les attributs XML, XML collections vs JS tableaux et XML contenu mixte de représentation. Si vos modèles de données sont assez simples, ou vous n'avez pas l'esprit de vie avec les solutions fournies par out-of-the-box transformateurs entre XML et JSON (par exemple, redondant objet de confinement, numérotés de propriétés de texte pour représenter disjoints texte mélangés avec des éléments), alors c'est peut-être pas un problème pour vous. Sinon, il existe des possibilités de personnalisation de la transformation de comportement à l'une des extrémités de la demande impérativement (mais malheureusement pas de façon déclarative, autant que j'en ai vu).

16voto

Abilash Points 1230

Je vous recommande d'avoir un xml en json convertisseur. En voici une.

https://code.google.com/p/jquery-xml2json-plugin/

Après la conversion, vous aurez un objet JS où vous pouvez utiliser votre normal angulaire directives pour analyser et les utiliser comme vous le souhaitez.

16voto

johngeorgewright Points 158

J'ai eu le même problème. Fini par faire un petit module pour convertir tout mon XML réponses à un ng.élément de l'objet.

https://github.com/johngeorgewright/angular-xml

11voto

Michael Bushe Points 148

Je suis la recherche x2js fonctionne assez bien: https://code.google.com/p/x2js/

Le client prend dans le XML, pas besoin de jouer avec l'angle de services. Une simple conversion rapide et le tour est joué, vous avez une API JSON que mimcs le document XML. Semble prendre soin de tous les cas d'utilisation que j'ai pu croiser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X