Ich suche nach etwas wie dom4j, aber ohne die Warzen von dom4j, wie schlechte oder fehlende Dokumentation und scheinbar ins Stocken geratener Entwicklungsstatus.
Hintergrund: Ich habe dom4j verwendet und befürwortet , fühle mich aber nicht ganz richtig, da ich weiß, dass die Bibliothek bei weitem nicht optimal ist (Beispiel: Sehen Sie, wie Methoden in der XSLT-bezogenen Stylesheet- Klasse dokumentiert sind; was würden Sie zum Ausführen übergeben () ) als String mode
Parameter?)
Anforderungen: Die Bibliothek sollte die grundlegende XML-Handhabung einfacher machen als bei Verwendung von reinem JDK ( javax.xml
und org.w3c.dom
Paketen). Dinge wie dieses:
- Lesen Sie ein XML-Dokument (aus einer Datei oder einem String) in ein Objekt, durchlaufen und bearbeiten Sie das DOM einfach, führen Sie XPath-Abfragen durch und führen Sie XSLT dagegen aus.
- Erstellen Sie ein XML-Dokument in Ihrem Java-Code, fügen Sie Elemente, Attribute und Daten hinzu und schreiben Sie das Dokument schließlich in eine Datei oder einen String.
Mir gefällt wirklich, was dom4j 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 : Java 5 vollständig nutzen und fehlende Dokumentation hinzufügen. Aber leider, wenn Sie genauer hinschauen :
Warnung: dom4j 2.0 befindet sich im Pre-Alpha-Stadium. 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, benötigen Sie Version 1.6.1. Ja wirklich.
... und die Website hat das schon lange gesagt . Gibt es also eine gute Alternative zu dom4j? Bitte begründen Sie Ihre bevorzugte Bibliothek, anstatt nur Namen und Links zu speichern. :-)
Antworten:
Klar, XOM :-)
Ich benutze XOM seit einigen Jahren und es gefällt mir immer noch sehr gut. Einfach zu bedienen, viele Dokumentationen und Artikel im Web, API ändert sich zwischen den Releases nicht. 1.2 wurde kürzlich veröffentlicht.
Auf der Webseite http://www.xom.nu/ finden Sie häufig gestellte Fragen, Kochbücher, Designgründe usw. Wenn nur alles mit so viel Liebe entworfen wurde :-)
Der Autor schrieb auch darüber, was mit XML-APIs nicht stimmt (und wie man sie behebt) . (Grundsätzlich Gründe, warum XOM überhaupt existiert)
Hier ist auch ein 5-teiliges Artima-Interview mit dem Autor über XOM, in dem sie darüber sprechen, was mit XML-APIs , The Good , The Bad und DOM , einer Entwurfsüberprüfung von JDOM , Lessons Learned from JDOM und schließlich Design Principles und XOM nicht stimmt .
quelle
Element.setAttribute(name, value)
,Element.setText(string)
, Besuchermuster (siehe lists.ibiblio.org/pipermail/xom-interest/2010-March/004076.html ), besser StAX / TrAX API - Unterstützung ), die dom4j hat.Der in das JDK eingebaute ... mit ein paar Ergänzungen.
Ja, die Verwendung ist schmerzhaft: Es basiert auf W3C-Spezifikationen, die vom Ausschuss klar 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" und "Ich mag StringBuffer", die aus Bibliotheken von Drittanbietern stammen. Zumal solche Argumente mit unterschiedlichen Bibliotheken in unterschiedliche Codeteile umgewandelt werden können ...
Wie gesagt, ich verbessere mich jedoch geringfügig: Die Practical XML- Bibliothek ist eine Sammlung von Dienstprogrammklassen, die die Arbeit mit dem DOM erleichtern . Abgesehen vom XPath-Wrapper gibt es hier nichts Komplexes, nur eine Reihe von Routinen, die ich für jeden Job neu geschrieben habe.
quelle
Ich habe XMLTool verwendet zum Ersetzen von Dom4j verwendet und es funktioniert ziemlich gut.
Das XML-Tool verwendet das 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 wurde für Java 5 entwickelt und es ist einfach, ein iterierbares Objekt über ausgewählten Elementen zu erstellen:
for (XMLTag xmlTag : tag.getChilds()) { System.out.println(xmlTag.getCurrentTagName()); }
quelle
Ich habe Jdom immer gemocht . Es wurde geschrieben, um intuitiver zu sein als das DOM-Parsen (und das SAX-Parsen scheint sowieso immer ungeschickt zu sein).
Aus dem Leitbild:
Das war so ziemlich meine Erfahrung - ziemlich intuitive Navigation von Knotenbäumen.
quelle
Ich verwende XStream , eine einfache Bibliothek, um Objekte in XML und wieder zurück zu serialisieren.
Es kann annotationsgesteuert sein (wie JAXB), aber es hat eine sehr einfache und benutzerfreundliche API und Sie können sogar JSON generieren.
quelle
Ich werde die eingebaute Antwort von @kdgregory ergänzen, indem ich sage, warum nicht JAXB?
Mit ein paar Anmerkungen ist es ziemlich einfach, die meisten XML-Dokumente zu modellieren. Ich meine, du wirst wahrscheinlich das Zeug analysieren und ein Objekt einfügen, oder?
JAXB 2.0 ist in JDK 1.6 integriert und im Gegensatz zu vielen anderen integrierten Javax-Bibliotheken ist diese ziemlich gut (Kohusuke hat daran gearbeitet, damit Sie wissen, dass es gut ist).
quelle
In einem kürzlich durchgeführten Projekt musste ich einige XML-Analysen durchführen und verwendete schließlich Simple Framework , das von einem Kollegen empfohlen wurde.
Ich war am Ende ziemlich zufrieden damit. Es verwendet einen annotationsbasierten Ansatz zum Zuordnen von XML-Elementen und -Attributen zu Java-Klassen und -Feldern.
<example> <a> <b> <x>foo</x> </b> <b> <y>bar</y> </b> </a> </example>
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 ganz anders als bei dom4j oder XOM. Sie vermeiden es, albernen XML-Code zu schreiben, aber zunächst werden Sie wahrscheinlich eine Weile mit dem Kopf gegen eine Wand schlagen, um die richtigen Anmerkungen zu erhalten.
(Ich war es, der diese Frage vor 4 Jahren gestellt hat. Obwohl XOM ein anständiger und sehr beliebter dom4j-Ersatz zu sein scheint, bin ich nicht dazu gekommen, sie vollständig zu akzeptieren. Neugierig, dass hier niemand Simple Framework erwähnt hat. Ich habe beschlossen, das zu beheben. wie ich es wahrscheinlich wieder benutzen würde.)
quelle
In unserem Projekt verwenden wir http://www.castor.org/, jedoch nur für kleine XML-Dateien. Es ist wirklich einfach zu erlernen, benötigt nur eine Mapping-XML-Datei (oder keine, wenn die XML-Tags perfekt mit Klassenattributen übereinstimmen) und fertig. Es unterstützt Listener (wie Rückrufe), um zusätzliche Verarbeitung durchzuführen. Die Nachteile: Es ist kein Java EE-Standard wie JAXB.
quelle
Sie können JAXB ausprobieren. Mit Anmerkungen ist dies sehr praktisch und einfach: Java Architecture for XML Binding.
quelle
Ich verwende manchmal Jericho , das hauptsächlich HTML-Parser ist, aber jede XML-ähnliche Struktur analysieren kann.
Natürlich nur für die einfachsten XML-Operationen, z. B. das Auffinden von Tags mit einem bestimmten Namen, das Durchlaufen der Struktur, das Ersetzen von Tags und deren Attributen. Sind dies jedoch nicht die häufigsten Anwendungsfälle?
quelle
Zum Erstellen von XML-Dokumenten empfehle ich xmlenc . Es wird in Cassandra verwendet .
quelle