Domanda

Sto cercando una buona libreria JavaScript per l'analisi dei dati XML.Dovrebbe essere molto più facile da usare rispetto a quello integrato Parser DOM XML in bundle con i browser.

Mi sono sentito un po' viziato lavorando con JSON e non vedo l'ora di qualcosa di simile per XML.

È stato utile?

Soluzione

Io uso jQuery per questo.Ecco un buon esempio:

(MODIFICARE:Nota: il seguente blog sembra essere scomparso.)

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

Ci sono anche moltissimi buoni esempi in jQuery documentazione:

http://www.webmonkey.com/tutorial/Easy_XML_Consumption_using_jQuery?oldid=20032

MODIFICARE:Dato che il blog per il mio esempio principale non è più disponibile, ho voluto aggiungere un altro esempio che mostri le nozioni di base e aiuti con i problemi relativi allo spazio dei nomi:

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

Altri suggerimenti

Disclaimer: Sono l'autore del file open-source Jsonix biblioteca che Maggio essere adatto al compito.


Un paio di anni fa stavo anche cercando una buona libreria di analisi/serializzazione XML<->JSON per JavaScript.Avevo bisogno di elaborare documenti XML conformi a schemi XML piuttosto complessi.In Java, utilizzo abitualmente JAXB per il compito quindi stavo cercando qualcosa di simile:

Esiste un'API JavaScript per l'associazione XML, analoga a JAXB per Java?

Allora non sono riuscito a trovare uno strumento del genere.

Così ho scritto Jsonix che considero un analogo JAXB per JavaScript.

Puoi trovare Jsonix adatto, se sei interessato alle seguenti funzionalità:

  • La conversione XML<->JSON si basa su a mappatura dichiarativa tra strutture XML e JSON
  • Questo Mappatura può essere generato da uno schema XML o scritto manualmente
  • Bidirezionale - supporta l'analisi e la serializzazione (o unmarshalling/marshalling in altri termini).
  • Supporto elementi, attributi e considera anche spazi dei nomi definito nel documento XML.
  • Rigorosamente digitato.
  • Rigorosamente strutturato.
  • Supporta quasi tutti i file Tipi incorporati dello schema XML (compresi tipi speciali come QName).
  • Funziona dentro browser così come Node.js, compatibile anche con RichiediJS/AMD (anche a amdefine in Node.js)
  • Ha ampia documentazione.

Tuttavia, Jsonix potrebbe essere eccessivo, se il tuo XML è piuttosto semplice, non ha uno schema XML o se non sei interessato a tipi o strutture rigorose.Controlla le tue esigenze.

Esempio

Provalo in JSFiddle.

Puoi prendere un schema dell'ordine di acquisto e generare una mappatura per esso utilizzando il seguente comando:

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

Otterrai un PO.js file che descrive le mappature tra strutture XML e JavaScript.Ecco uno snippet di questo file di mappatura per darti un'idea:

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'
    }, ... ]
};

Avendo questo file di mappatura puoi analizzare il file 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);
    });

Oppure serializza il tuo oggetto JavaScript come 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: { /* ... */ }
    }
});

Puoi provarlo in JSFiddle per vedere come funziona nella pratica.


Dichiarazione di non responsabilità aggiuntiva: questa risposta è molto votata a causa di seguente discussione su meta. Quindi, per favore, fai attenzione al "meta-effetto". I voti alti qui non significano necessariamente che Jsonix sia valido, applicabile o consigliato dalla community.Non fatevi ingannare dai voti alti.

Se il tuo XML è in un formato semplice puoi guardare jQuery e il Plug-in da XML a JSON o il xmlObjectifier.

Per un parser diretto che potresti voler dare un'occhiata XML per <SCRIPT>.

Hai provato XML per lo SCRIPT.Devo ammettere che non l'ho mai usato personalmente, ma ho sentito/letto alcune cose positive a riguardo.

Provalo e magari condividi la tua esperienza qui?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top