Frage

Ich bin auf der Suche nach einer guten Bibliothek JavaScript für XML-Daten-Parsing. Es sollte viel einfacher zu bedienen als die eingebauten in XML-DOM-Parser mit dem gebündelten seinem Browser.

Ich habe ein bisschen verwöhnt mit JSON zu arbeiten und freue mich auf etwas auf ähnliche Weise für XML.

War es hilfreich?

Lösung

Ich benutze jQuery für diese. Hier ist ein gutes Beispiel:

(EDIT:. Hinweis - der folgende Blog scheint verschwunden zu sein)

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

Es gibt auch viele, viele gute Beispiele in der jQuery Dokumentation:

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

EDIT: Aufgrund des Blog für mein primäres Beispiel weggeht, wollte ich ein weiteres Beispiel hinzufügen, die die Grundlagen zeigen und helfen mit Namespace Problemen:

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

Andere Tipps

Hinweis: Ich bin der Autor, wenn die Open-Source- Jsonix Bibliothek, die können für die Aufgabe geeignet sein.


Ein paar Jahre war ich auch auf der Suche nach einer guten XML <-> JSON Parsen / Serialisierung Bibliothek für JavaScript. Ich brauchte XML-Dokumente zu verarbeiten, um ziemlich komplexes XML-Schema entsprechen. In Java, verwende ich routinemäßig JAXB für die Aufgabe so war ich auf der Suche nach etwas ähnlich:

  

Gibt es eine JavaScript-API für XML-Bindung - analog zu JAXB für Java

ich nicht ein solches Instrument zu finden, damals.

So schrieb ich Jsonix die ich für ein JAXB analog sein für JavaScript.

Sie können feststellen, Jsonix geeignet, wenn Sie in den folgenden Features interessiert sind:

  • XML <-> JSON Konvertierung basiert auf einem declaraive Mapping , um zwischen XML und JSON Strukturen
  • Die Mapping sein aus einem XML-Schema erzeugt oder geschrieben manuell
  • Bidirektionale -. Unterstützt sowie Serialisierung Parsen (oder unmarshalling / in anderen Begriffen Rangier)
  • Support Elemente , Attribute und hält auch Namespaces im XML-Dokument definiert ist.
  • Strictly eingegeben haben.
  • Strictly strukturiert.
  • Unterstützung fast alle der XML-Schema eingebauten Typen (einschließlich Spezialtypen wie QName).
  • Werke in der Browser sowie Node.js , auch kompatibel zu RequireJS / AMD (auch amdefine in Node.js)
  • umfangreiche Dokumentation .

Allerdings Jsonix kann ein zu viel des Guten , wenn Ihr XML ziemlich einfach ist, nicht über ein XML-Schema oder wenn Sie in strikte Typisierung oder Strukturen nicht interessiert. Überprüfen Sie Ihre Anforderungen.

Beispiel:

Versuchen Sie es in JSFiddle .

Sie können eine bestellen Schema kaufen und erzeugen ein Mapping für den folgenden Befehl:

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

Sie erhalten eine PO.js Datei erhalten, die Zuordnungen zwischen XML und JavaScript-Strukturen beschreibt. Hier ist ein Ausschnitt aus dieser Zuordnungsdatei Ihnen einen Eindruck zu geben:

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

Mit dieser Mapping-Datei können Sie die parsen 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);
    });

oder serialisiert Ihr JavaScript-Objekt als 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: { /* ... */ }
    }
});

Sie können es versuchen, in JSFiddle zu sehen, wie es in der Praxis funktioniert.


Zusätzlicher Haftungsausschluss: diese Antwort ist hoch gestimmt, weil der folgende Diskussion auf Meta. So beachten Sie bitte die „Meta-Effekt“. Hohe Stimmen hier nicht unbedingt bedeuten, dass Jsonix gut, sie geltendenle oder von der Gemeinschaft empfohlen. Lass dich nicht von den hohen Stimmen verleiten werden.

Wenn Ihr XML in einem einfachen Format ist, kann man sich jQuery und die XML zu JSON-Plugin oder die xmlObjectifier .

Für einen geraden Parser können Sie wollen, betrachten XML für

scroll top