Beste XML-Verarbeitungsklasse in Java [geschlossen]

8

Welches ist die beste Klasse in Java, um mit XML-Dokumenten zu arbeiten?

    
Ajay 28.08.2009, 09:17
quelle

12 Antworten

19

Es hängt wirklich davon ab, was Sie mit dem XML-Dokument machen wollen und wie groß die Dokumente sind.

Grob gesagt können Sie XML-APIs wie folgt kategorisieren:

  • DOM-APIs - Laden Sie das gesamte Dokument in den Speicher, wodurch die Größe des zu verarbeitenden Dokuments begrenzt wird. Sie können dann jedoch optimierte Strukturen für die Navigation und Transformation erstellen
  • Streaming-APIs - Ihre Anwendung muss Parsereignisse auf niedriger Ebene interpretieren (z. B. Elementanfang, Elementende usw.), Sie sind jedoch nicht auf den Arbeitsspeicher beschränkt. Es gibt zwei Arten von Streaming-API - Push und Pull. Push-Parser feuern Parse-Ereignisse an einem von Ihnen definierten Objekt ab, und dieses Objekt muss den aktuellen Parse-Status verfolgen, z. B. mit einer Statusmaschine oder einem Stack. Pull-Parser lassen Ihre Anwendung Parser-Events vom Parser ziehen. Dies macht es einfach, einen rekursiven Descent-Parser zu schreiben, um den XML-Inhalt zu verarbeiten, aber dann wird die Stapelgröße zu einer Grenze für die Größe des Dokuments, das Sie verarbeiten können.
  • XML-Mapper - Ordnen Sie XML-Inhalt Java-Objekten zu. Es gibt zwei Hauptansätze für das XML-Mapping: Code-Gen oder Reflektion. Code-Gen-Mapper generieren Java-Klassen aus einem XML-Schema, dh Sie müssen die Schema-Struktur nicht in Java-Code duplizieren, haben aber den Nachteil, dass Ihr Java-Code genau die Schema-Struktur widerspiegelt. Auch die meisten Code-Generatoren erzeugen NOJO Klassen, mit denen es schwierig ist zu arbeiten und kein eigenes Verhalten haben. Reflektierende Mapper ermöglichen es Ihnen, Java-Klassen mit Rich-Verhalten zu schreiben und dann zu definieren, wie sie zu / von XML gemappt werden. Wenn Sie einem vordefinierten Schema entsprechen müssen, müssen Sie sicherstellen, dass Ihre Klassen und die Mapping-Konfiguration korrekt sind w.r.t. dieses Schema.

Einige der verfügbaren Optionen sind:

  • DOM-APIs: Die DOM-APIs in der Standardbibliothek sind Standard (offensichtlich!) und arbeiten so mit anderen Bibliotheken zusammen, aber sie sind schrecklich. Es gibt einige bequemere DOM-ähnliche APIs, wie zum Beispiel XOM (mein Favorit aus den gleichen Gründen wie Adam Batkin oben) oder JDOM . Schau dir ein paar an und entscheide, welche API du bevorzugst.
  • Streaming-APIs: Die Standardbibliothek enthält eine Implementierung des SAX-Push-Parsers. Der Standard-Pull-Parser für Java ist StAX .
  • Mapping-APIs: JAXB ist ein JSR-Standard, aber ich bevorzuge XStream , weil ich die Mapping-Konfiguration einfacher von den zugeordneten Klassen trennen kann (keine Notwendigkeit für Anmerkungen oder XML-Konfiguration) und Objekte anderen Datenformaten zuordnet.
Nat 28.08.2009, 10:33
quelle
3

Ich finde dom4j , um über alles andere hinauszukommen, was ich benutzt habe (besonders JDOM, was ich besonders arm finde API). dom4j erlaubt es, Jaxen auch für XPath-Unterstützung einzubinden.

Beispiele:

%Vor%     
Matthias 28.08.2009 09:24
quelle
1

Ich denke, es ist JDOM für die Benutzerfreundlichkeit.

    
duffymo 28.08.2009 09:20
quelle
1

Ich hatte Glück mit JAXB . Es ist in Java SE 6 enthalten.

    
Joonas Pulakka 28.08.2009 09:24
quelle
0

Es gibt viele Bibliotheken, mit denen Sie XML auf verschiedene Arten handhaben können, und kein Weg ist "der Beste". Wie immer hängt es davon ab, was Sie zu tun versuchen und was Ihre Anforderungen sind.

Wenn ich einen DOM-artigen Parser oder zum Erstellen von XML-Dokumenten brauche, mag ich persönlich XOM , da dies die XML-Dokumente garantiert sind gut geformt und "korrekt". Seine oberste Priorität ist die Korrektheit, die wichtig ist, wenn sie mit anderen Systemen zusammenarbeitet, was XML sehr gut macht. Seine API ist auch sehr gut entworfen und intuitiv, allgemeine Operationen sehr einfach machend.

    
Adam Batkin 28.08.2009 09:21
quelle
0

Ich bevorzuge eine klassische Kombination von DOM und SAX.

    
folone 28.08.2009 09:28
quelle
0

Wenn Sie nur lesen, dann ist XPath eine gute Wette. Ansonsten ist das DOM (im org.w3c.dom -Paket) die beste Wahl.

    
Imagist 28.08.2009 09:55
quelle
0

Java bietet eine gute Unterstützung für XML. Das Problem in einem Sinne ist, dass es so viele Möglichkeiten gibt. Es gibt also keine Lösung, die "die" Art ist, XML in Java zu verarbeiten. Sie müssen Ihre Werkzeuge basierend auf dem Problem auswählen.

Angenommen, Sie haben komplexe validierte Dokumente, die Sie in einen Objektbaum laden möchten, um den Baum abzufragen und zu bearbeiten. Sie werden einen DOM-Parser dafür brauchen, und es gibt eine Nummer zur Auswahl. Dies konvertiert das gesamte Dokument in Objekte, was in Bezug auf die CPU teuer sein kann.

Angenommen, Sie haben ein Dokument, in dem Sie bestimmte Elemente auswählen möchten, und die Leistung ist ein Problem. Probieren Sie einen SAX-Parser, einen Pull-Parser oder XPath aus.

Vielleicht müssen Sie Objekte auf dem Draht marshalieren / unmarshalen. JAXB ist ein Kandidat dafür, ebenso wie andere Optionen.

Also, es gibt keine richtige Antwort auf Ihre Frage. Wie bei jedem [Programmier-] Problem müssen Sie sich das Problem ansehen, die Optionen auswerten und das beste Werkzeug für den Job auswählen.

    
Don Branson 28.08.2009 10:11
quelle
0

Sie müssen sich für die Verarbeitung von XML zwischen zwei verschiedenen Ansätzen entscheiden: Es gibt DOM und SAX , beide mit Vor- und Nachteilen. Es hängt alles von Ihren Anforderungen und der Größe des XML-Dokuments ab, das Sie verarbeiten möchten. Der bereits erwähnte JAXB erstellt eine API über beiden und wird mit Java 6 ausgeliefert.

Wenn Sie das oben Gesagte verstanden haben, möchten Sie vielleicht Ihre Frage konkretisieren und vielleicht nach dem besten DOM oder der besten SAX-Implementierung fragen. Abgesehen davon wäre es gut, wenn Sie sagen könnten, was Ihre Anforderungen sind. Möchten Sie XML schreiben oder lesen? Wie groß werden die Dateien sein? Und so weiter.

BEARBEITEN:

Wie Nat darauf hingewiesen hat, gibt es auch StAX als drittes alternatives Konzept.

    
Tim Büthe 28.08.2009 09:51
quelle
0

Immer, wenn ich mit XML-Dokumenten arbeiten musste, dachte ich immer an dom4j / sax als erstes Mittel, und es lässt mich nie im Stich. ;)

Sie sollten in den SAXReader schauen.

    
Rifk 28.08.2009 10:45
quelle
0

@Epaga, wenn Sie nicht "das Beste" in den Kontext stellen, werden Sie kläglich scheitern.

Zum Beispiel wäre es sehr dumm, einen riesigen XML-Code in eine DOM-ähnliche Struktur zu laden. Sie müssen das Werkzeug mit Bedacht wählen.

    
lazy 28.08.2009 15:04
quelle
0

XOM ( Ссылка ) ist ein einfaches, flexibles XML-Toolkit, das ich einfacher und einfacher benutze als viele andere Parser. Seit dem Wechsel von den Standard-W3C-basierten Tools hat sich meine Produktivität erheblich erhöht. In seinen Webseiten erklärt der Autor Elliotte Rusty Harold, warum das Design von XOM das geeignete Modell für ein XML-DOM ist.

    
peter.murray.rust 09.09.2009 21:42
quelle

Tags und Links