2008-09-17 5 views
16

Ich bin auf der Suche nach einer guten JavaScript-Bibliothek zum Parsen von XML-Daten. Es sollte viel einfacher zu verwenden sein als die integrierte XML DOM parsers, die mit den Browsern gebündelt ist.XML-Parser für JavaScript

Ich habe ein bisschen mit JSON arbeiten verwöhnt und freue mich auf etwas Ähnliches für XML.

+0

Ich erstellt [Fast Xml Parser] (https://github.com/NaturalIntelligence/fast-xml-parser) für hohe Leistung. –

Antwort

6

Ich verwende 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-with-javascript/

+0

Der Reindel-Link wurde entführt. – DuckMaestro

+1

Hier ist ein Spiegel des Blogs: http://web.archive.org/web/20080110113712/http://blog.reindel.com/2007/09/24/jquery-and-xml-revisited/ – brasofilo

+0

Vielleicht können Sie einen Ausdruck des Blogs als PDF-Anhang zur Antwort hinzufügen? Ich würde die "EDIT" -Noten loswerden, weil sie den Text weniger klar machen. Ich würde nur tote Links entfernen und sie durch Live-Links ersetzen –

1

Haben Sie XML for SCRIPT versucht. Ich muss zugeben, dass ich es nie persönlich benutzt habe, aber ich habe ein paar gute Dinge darüber gehört/gelesen.

Probieren Sie es aus und teilen Sie Ihre Erfahrung hier vielleicht?

48

Haftungsausschluss: Ich bin der Autor, wenn die Open-Source-Bibliothek Jsonix die für die Aufgabe geeignet sein kann. Ein paar Jahre


vor war ich auch auf der Suche nach einem guten XML < -> JSON Parsen/Serialisierung Bibliothek für JavaScript. Ich musste XML-Dokumente verarbeiten, die eher komplexen XML-Schemas entsprachen. In Java, verwende ich JAXB routinemäßig für die Aufgabe so war ich der Suche nach etwas ähnlich:

Is there a JavaScript API for XML binding - analog to JAXB for Java?

ich ein solches Werkzeug damals finden konnte.

Also schrieb ich Jsonix, die ich für ein JAXB-Analog für JavaScript halte.

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

  • XML < -> JSON Konvertierung basiert auf einer declaraive Mapping zwischen XML und JSON Strukturen
  • Diese Mapping kann aus einem XML-Schema oder manuell geschrieben werden
  • Bidirektional - unterstützt Parsing sowie Serialisierung (oder Unmarshalling/Marshalling in anderen Begriffen).
  • Unterstützung Elemente, Attribute und hält auch Namespaces im XML-Dokument definiert.
  • Streng typisiert.
  • Streng strukturiert.
  • Unterstützt fast alle XML-Schema-integrierten Typen (einschließlich spezieller Typen wie QName).
  • Arbeiten in Browsern sowie Node.js, auch kompatibel zu RequireJS/AMD (auch amdefine in Node.js)
  • Hat extensive documentation.

jedoch Jsonix kann ein Übermaß sein, wenn Ihr XML ziemlich einfach ist, nicht über ein XML-Schema oder wenn Sie in strikter Typisierung oder Strukturen nicht interessieren. Überprüfen Sie Ihre Anforderungen.

Beispiel

es in JSFiddle Versuchen.

Sie können eine purchase order schema nehmen und eine Zuordnung für sie mit dem folgenden Befehl erzeugen:

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

diese Zuordnungsdatei Nachdem Sie die XML analysieren kann:

// 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 in JSFiddle ausprobieren, um zu sehen, wie es in der Praxis funktioniert.


Zusatzhinweis: diese Antwort ist hoch gestimmt, weil die following discussion auf Meta. Bitte beachten Sie den "Meta-Effekt". Hohe Stimmen hier bedeuten nicht notwendigerweise, dass Jsonix gut ist, anwendbar oder von der Community empfohlen wird. Lassen Sie sich von den hohen Stimmen nicht täuschen.