Welche Java XML-Bibliothek empfehlen Sie (um dom4j zu ersetzen)?

Ich suche etwas wie dom4j, aber ohne dom4j’s Warzen, wie schlechte oder fehlende Dokumentation und scheinbar blockierten Entwicklungsstatus.

Hintergrund: Ich habe dom4j verwendet und befürwortet , aber ich fühle mich nicht ganz richtig, weil ich weiß, dass die Bibliothek nicht optimal ist (Beispiel: Sehen Sie, wie Methoden in XSLT-bezogenen Stylesheet- classn dokumentiert sind. ) als String mode Parameter?)

Anforderungen: Die Bibliothek sollte die grundlegende Handhabung von XML erleichtern, wenn sie reine JDK- Pakete ( javax.xml und org.w3c.dom ) verwendet. Dinge wie dieses:

  • Lesen Sie ein XML-Dokument (aus Datei oder String) in ein Objekt, navigieren und bearbeiten Sie das DOM, führen Sie XPath-Abfragen aus und führen Sie XSLT dagegen aus.
  • Erstellen Sie ein XML-Dokument in Ihrem Java-Code, fügen Sie Elemente und Attribute und Daten hinzu und schreiben Sie das Dokument schließlich in eine Datei oder einen String.

Mir gefällt, was dom4j eigentlich verspricht : ” Einfach zu bedienende Open Source-Bibliothek für die Arbeit mit XML, XPath und XSLT […] mit voller Unterstützung für DOM, SAX und JAXP. ” Und das kommende dom4j 2.0 behauptet, alles zu reparieren : Verwenden Sie Java 5 vollständig und fügen Sie fehlende Dokumentation hinzu. Aber leider, wenn man genauer hinsieht :

Warnung: dom4j 2.0 befindet sich in der Pre-Alpha-Phase. Es ist wahrscheinlich, dass es nicht kompiliert werden kann. Falls es zufällig kompiliert werden kann, ist es wahrscheinlich, dass es nicht ausgeführt werden kann. Falls es gelegentlich läuft, kann es plötzlich explodieren. Wenn Sie dom4j verwenden möchten, möchten Sie Version 1.6.1. Ja wirklich.

… und die Website hat das schon lange gesagt. Gibt es eine gute Alternative zu dom4j? Bitte geben Sie eine Begründung für Ihre bevorzugte Bibliothek an, anstatt nur Namen und Links zu vercasting. 🙂

Klar, XOM 🙂

XOM wurde entwickelt, um einfach zu erlernen und einfach zu bedienen zu sein. Es funktioniert sehr geradlinig und hat eine sehr flache Lernkurve. Vorausgesetzt, Sie sind bereits mit XML vertraut, sollten Sie in der Lage sein, sehr schnell mit XOM zu arbeiten.

Ich benutze XOM seit mehreren Jahren, und ich mag es immer noch sehr. Einfach zu bedienen, viel Dokumentation und Artikel im Web, API ändert sich nicht zwischen den Versionen. 1.2 wurde kürzlich veröffentlicht.

XOM ist die einzige XML-API, die keine Kompromisse bei der Korrektheit eingeht. XOM akzeptiert nur gut formatierte XML-Dokumente im Namespace und ermöglicht Ihnen nur das Erstellen von XML-Dokumenten im Namespace. (In der Tat ist es ein wenig strenger als das: Es garantiert tatsächlich, dass alle Dokumente Rund-umschaltbar sind und wohldefinierte XML-Infosets haben.) XOM verwaltet Ihr XML, so dass Sie nicht müssen. Mit XOM können Sie sich auf den einzigartigen Wert Ihrer Anwendung konzentrieren und XOM vertrauen, um die XML richtig zu machen.

Schauen Sie sich die Webseite http://www.xom.nu/ für FAQ, Kochbuch, Designprinzipien usw. an. Wenn nur alles mit so viel Liebe gestaltet wurde 🙂

Autor schrieb auch über Was ist falsch mit XML APIs (und wie man sie behebt) . (Grundsätzlich Gründe, warum XOM überhaupt existiert)

Hier ist auch ein 5-teiliges Artima-Interview mit einem Autor über XOM, in dem es um XML-APIs , das Gute, das Schlechte und das DOM , einen Design Review von JDOM , Lessons Learned von JDOM und schließlich Design Principles und XOM geht .

Der in das JDK eingebaute … mit ein paar Ergänzungen.

Ja, es ist schmerzhaft zu verwenden: Es ist nach W3C-Spezifikationen modelliert, die klar vom Ausschuss entworfen wurden. Es ist jedoch überall verfügbar, und wenn Sie sich darauf festlegen, stoßen Sie nicht auf die Argumente “Ich mag Dom4J”, “Ich mag JDOM”, “Ich mag StringBuffer”, die von Bibliotheken von Drittanbietern stammen. Zumal sich solche Argumente mit verschiedenen Bibliotheken in verschiedene Codeabschnitte verwandeln können …

Wie ich bereits sagte, verbessere ich mich ein wenig: Die praktische XML- Bibliothek ist eine Sammlung von Hilfsklassen, die die Arbeit mit dem DOM erleichtern . Anders als der XPath-Wrapper gibt es hier nichts Komplexeres, nur eine Reihe von Routinen, die ich selbst für jeden Job neu geschrieben habe.

Ich habe XMLTool verwendet, um Dom4j zu ersetzen, und es funktioniert ziemlich gut.

XML-Tool verwendet Fluent Interface-Muster, um XML-Manipulationen zu erleichtern:

 XMLTag tag = XMLDoc.newDocument(false) .addDefaultNamespace("http://www.w3.org/2002/06/xhtml2/") .addNamespace("wicket", "http://wicket.sourceforge.net/wicket-1.0") .addRoot("html") .addTag("wicket:border") .gotoRoot().addTag("head") .addNamespace("other", "http://other-ns.com") .gotoRoot().addTag("other:foo"); System.out.println(tag.toString()); 

Es ist für Java 5 gemacht und es ist einfach, ein iterbares Objekt über ausgewählte Elemente zu erstellen:

 for (XMLTag xmlTag : tag.getChilds()) { System.out.println(xmlTag.getCurrentTagName()); } 

Ich habe jdom immer gemocht. Es wurde geschrieben, um intuitiver zu sein als das DOM-Parsing (und das SAX-Parsing scheint sowieso immer plump zu sein).

Aus dem Leitbild:

Es gibt keinen zwingenden Grund dafür, dass ein Java-API XML so manipuliert, dass es komplex, knifflig, unintuitiv oder schmerzhaft ist. JDOMTM ist sowohl Java-zentriert als auch Java-optimiert. Es verhält sich wie Java, es verwendet Java-Sammlungen, es ist eine ganz natürliche API für aktuelle Java-Entwickler und es bietet einen kostengünstigen Einstiegspunkt für die Verwendung von XML.

Das ist meine Erfahrung – ziemlich intuitive Navigation von Knotenbäumen.

Ich benutze XStream , eine einfache Bibliothek, um Objekte in XML und wieder zurück zu serialisieren.

Es kann Annotation-getrieben werden (wie JAXB), aber es hat sehr einfach und leicht zu bedienen API und Sie können sogar JSON generieren.

Ich füge die eingebaute Antwort von @kdgregory hinzu, indem ich sage, warum nicht JAXB?

Mit ein paar Anmerkungen ist es ziemlich einfach, die meisten XML-Dokumente zu modellieren. Ich meine, dass du wahrscheinlich das Zeug analysieren und ein Objekt reinlegen wirst?

JAXB 2.0 ist in JDK 1.6 integriert und im Gegensatz zu vielen anderen eingebauten Javax-Bibliotheken ist diese ziemlich gut (Kohusuke hat daran gearbeitet, damit Sie wissen, dass es gut ist).

In einem aktuellen Projekt musste ich etwas XML-Parsing durchführen und endete mit Simple Framework , das von einem Kollegen empfohlen wurde.

Ich war am Ende ziemlich glücklich damit. Es verwendet einen anmerkungsbasierten Ansatz, bei dem XML-Elemente und -Attribute Java-classn und -Feldern zugeordnet werden.

    foo   bar    

Entsprechender Java-Code:

 @Root public class Example { @Path("a/b[1]") @Element private String x; @Path("a/b[2]") @Element private String y; } 

Es ist alles anders als dom4j oder XOM. Sie vermeiden es, albernen Code zu schreiben, aber Sie werden wahrscheinlich zuerst eine Weile mit dem Kopf gegen eine Wand schlagen und versuchen, die Anmerkungen zu korrigieren.

(Ich war es, der diese Frage vor vier Jahren stellte. Obwohl XOM ein anständiger und recht beliebter Ersatz für dom4j ist, habe ich ihn nicht vollständig angenommen. Neugierig, dass hier niemand Simple Framework erwähnt hat. wie ich es wahrscheinlich wieder benutzen würde.)

In unserem Projekt verwenden wir http://www.castor.org/ aber nur für kleine XML-Dateien. Es ist wirklich einfach zu lernen, benötigt nur eine Mapping-XML-Datei (oder keine, wenn die XML-Tags perfekt classnattribute entsprechen) und es ist fertig. Es unterstützt Listener (wie Callbacks), um zusätzliche Verarbeitung durchzuführen. Die Nachteile: Es ist kein Java EE Standard wie JAXB.

Sie können JAXB ausprobieren, mit Anmerkungen ist es sehr praktisch und einfach zu tun: Java-Architektur für XML-Binding.

Ich benutze manchmal Jericho , der hauptsächlich HTML-Parser ist, aber kann jede XML-ähnliche Struktur parsen.

Natürlich ist es nur für die einfachsten XML-Operationen, wie das Finden von Tags mit gegebenem Namen, Iterieren durch Struktur, Ersetzen von Tags und deren Attribute, aber sind dies nicht die meisten Anwendungsfälle?

Zum Erstellen von XML-Dokumenten empfehle ich xmlnc . Es wird in Cassandra verwendet .