Question

Je recherche une bonne bibliothèque JavaScript pour analyser les données XML. Il devrait être beaucoup plus facile à utiliser que les analyseurs syntaxiques XML DOM fournis avec navigateurs.

Je me suis un peu gâté de travailler avec JSON et je suis impatient de voir quelque chose de similaire sur XML.

Était-ce utile?

La solution

J'utilise jQuery pour cela. Voici un bon exemple:

(EDIT: Note - le blog suivant semble avoir disparu.)

http://blog.reindel.com/ 2007/09/24 / jquery-and-xml-revisited /

La documentation jQuery contient également de très bons exemples:

http://www.webmonkey.com/tutorial/Easy_XML_Consumption_us Q_CQ

EDIT: En raison de la disparition du blog de mon exemple principal, je souhaitais ajouter un autre exemple illustrant les bases et aidant à résoudre les problèmes d'espace de nom:

http://www.zachleat.com/web/selecting- xml-with-javascript /

Autres conseils

Avertissement: je suis l'auteur du code source ouvert . bibliothèque qui peut convenir à la tâche.

Il y a quelques années, je recherchais également une bonne bibliothèque XML < - > JSON d'analyse / de sérialisation pour JavaScript. J'avais besoin de traiter des documents XML conformes à des schémas XML assez complexes. En Java, j’utilise régulièrement JAXB pour la tâche. Je cherchais donc quelque chose de similaire:

  

Y a-t-il un Liaison JavaScript API pour XML - analogue à JAXB pour Java?

Je n'ai pas réussi à trouver un tel outil à l'époque.

J'ai donc écrit Jsonix , que je considère comme un analogue JAXB pour JavaScript.

Vous pouvez trouver Jsonix , si les fonctionnalités suivantes vous intéressent:

  • XML < - > la conversion JSON est basée sur un mappage déclaratif entre des structures XML et JSON
  • Ce mappage peut être généré à partir d'un schéma XML ou écrit manuellement
  • .
  • Bidirectionnel : prend en charge l'analyse ainsi que la sérialisation (ou unmarshalling / marshalling en d'autres termes).
  • Prend en charge les éléments , les attributs et considère également les espaces de nom définis dans le document XML.
  • Strictement tapé.
  • Strictly structuré.
  • Prend en charge la quasi-totalité des types de schéma XML (y compris les types spéciaux tels que QName).
  • Fonctionne dans les navigateurs ainsi que dans Node.js , également compatible avec RequireJS / AMD (également à amdefine dans Node.js)
  • Dispose de documentation détaillée .

Cependant, Jsonix peut être une surcharge , si votre XML est assez simple, n’a pas de schéma XML ou si vous n'êtes pas intéressé par le typage strict ou les structures. Vérifiez vos besoins.

Exemple

Essayez-le dans JSFiddle .

Vous pouvez utiliser un schéma de bon de commande et générer un mappage pour celui-ci en utilisant la commande suivante:

java -jar node_modules/jsonix/lib/jsonix-schema-compiler-full.jar
  -d mappings -p PO purchaseorder.xsd

Vous obtiendrez un fichier PO.js qui décrit les mappages entre les structures XML et JavaScript. Voici un extrait de ce fichier de mappage qui vous donnera une impression:

var PO = {
    name: 'PO',
    typeInfos: [{
        localName: 'PurchaseOrderType',
        propertyInfos: [{
            name: 'shipTo',
            typeInfo: 'PO.USAddress'
        }, {
            name: 'billTo',
            typeInfo: 'PO.USAddress'
        }, {
            name: 'comment'
        }, {
            name: 'orderDate',
            typeInfo: 'Calendar',
            type: 'attribute'
        }, ...]
    }, {
        localName: 'USAddress',
        propertyInfos: [ ... ]
    }, ...],
    elementInfos: [{
        elementName: 'purchaseOrder',
        typeInfo: 'PO.PurchaseOrderType'
    }, ... ]
};

Avec ce fichier de mappage, vous pouvez analyser le XML. :

// First we construct a Jsonix context - a factory for unmarshaller (parser)
// and marshaller (serializer)
var context = new Jsonix.Context([PO]);

// Then we create a unmarshaller
var unmarshaller = context.createUnmarshaller();

// Unmarshal an object from the XML retrieved from the URL
unmarshaller.unmarshalURL('po.xml',
    // This callback function will be provided
    // with the result of the unmarshalling
    function (unmarshalled) {
        // Alice Smith
        console.log(unmarshalled.value.shipTo.name);
        // Baby Monitor
        console.log(unmarshalled.value.items.item[1].productName);
    });

Ou sérialisez votre objet JavaScript au format XML:

// Create a marshaller
var marshaller = context.createMarshaller();

// Marshal a JavaScript Object as XML (DOM Document)
var doc = marshaller.marshalDocument({
    name: {
        localPart: "purchaseOrder"
    },
    value: {
        orderDate: { year: 1999, month: 10, day: 20 },
        shipTo: {
            country: "US",
            name: "Alice Smith",
            street: "123 Maple Street",
            city: "Mill Valley",
            state: "CA",
            zip: 90952
        },
        billTo: { /* ... */ },
        comment: 'Hurry, my lawn is going wild!',
        items: { /* ... */ }
    }
});

Vous pouvez l’essayer dans JSFiddle pour voir comment cela fonctionne dans la pratique.

Clause de non-responsabilité supplémentaire: , cette réponse a obtenu un vote élevé en raison de la discussion suivante sur méta. Alors s'il vous plaît soyez conscient du " méta-effet ".. Les votes élevés ici ne signifient pas nécessairement que Jsonix est bon, applicable ou recommandé par la communauté. Ne vous laissez pas induire en erreur par les votes élevés.

Si votre format XML est simple, consultez jQuery et le plug-in XML vers JSON ou xmlObjectifier .

Pour un analyseur syntaxique simple, consultez XML pour < SCRIPT > <.

Avez-vous essayé XML pour SCRIPT . Je dois admettre que je ne l’ai jamais utilisé personnellement, mais j’ai entendu / lu quelques bonnes choses à ce sujet.

Essayez et partagez peut-être votre expérience ici?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top