Ich suche in der Java-Bibliothek nach dem Parsen von XML (komplexe Konfigurations- und Datendateien). Ich habe ein bisschen gegoogelt, konnte aber nichts anderes als dom4j finden (Scheint, als würden sie an V2 arbeiten). Ich habe mir die Commons-Konfiguration angesehen, aber nicht Andere Apache-Projekte in XML scheinen sich im Ruhezustand zu befinden. Ich habe dom4j nicht selbst evaluiert, wollte aber nur wissen, ob Java andere (gute) Open-Source-XML-Parsing-Bibliotheken hat. und wie ist deine erfahrung mit dom4j?
Lassen Sie mich nach der Antwort von @ Voo eine andere fragen: Soll ich die in Java integrierten Klassen oder eine Drittanbieter-Bibliothek wie dom4j verwenden? Was sind die Vorteile?
Antworten:
Tatsächlich unterstützt Java 4 Methoden, um XML sofort zu analysieren:
DOM-Parser / Builder: Die gesamte XML-Struktur wird in den Speicher geladen, und Sie können die bekannten DOM-Methoden verwenden, um damit zu arbeiten. Mit DOM können Sie auch mit Xslt-Transformationen in das Dokument schreiben. Beispiel:
SAX Parser: Nur zum Lesen eines XML-Dokuments. Der Sax-Parser durchläuft das Dokument und ruft die Rückrufmethoden des Benutzers auf. Es gibt Methoden zum Starten / Beenden eines Dokuments, Elements usw. Sie sind in org.xml.sax.ContentHandler definiert und es gibt eine leere Hilfsklasse DefaultHandler.
StAx Reader / Writer: Dies funktioniert mit einer datenstromorientierten Schnittstelle. Das Programm fragt nach dem nächsten Element, wenn es wie ein Cursor / Iterator bereit ist. Sie können damit auch Dokumente erstellen. Dokument lesen:
Dokument schreiben:
JAXB: Die neueste Implementierung zum Lesen von XML-Dokumenten: Ist Teil von Java 6 in Version 2. Auf diese Weise können wir Java-Objekte aus einem Dokument serialisieren. Sie lesen das Dokument mit einer Klasse, die eine Schnittstelle zu javax.xml.bind.Unmarshaller implementiert (eine Klasse hierfür erhalten Sie von JAXBContext.newInstance). Der Kontext muss mit den verwendeten Klassen initialisiert werden, aber Sie müssen nur die Stammklassen angeben und müssen sich nicht um statisch referenzierte Klassen kümmern. Sie verwenden Anmerkungen, um anzugeben, welche Klassen Elemente (@XmlRootElement) und welche Felder Elemente (@XmlElement) oder Attribute (@XmlAttribute, was für eine Überraschung!) Sein sollen.
Dokument schreiben:
Beispiele schamlos kopiert von einigen alten Vorlesungsfolien ;-)
Bearbeiten: Über "Welche API soll ich verwenden?". Nun, es kommt darauf an - nicht alle APIs haben die gleichen Funktionen wie Sie sehen, aber wenn Sie die Kontrolle über die Klassen haben, die Sie zum Zuordnen des XML-Dokuments verwenden, ist JAXB meine persönliche Lieblingslösung, wirklich elegant und einfach (obwohl ich sie nicht verwendet habe) wirklich große Dokumente, es könnte etwas komplex werden). SAX ist auch ziemlich einfach zu bedienen und halten Sie sich einfach von DOM fern, wenn Sie keinen wirklich guten Grund haben, es zu verwenden - meiner Meinung nach alte, klobige API. Ich glaube nicht, dass es moderne Bibliotheken von Drittanbietern gibt, die etwas besonders Nützliches enthalten, das in der STL fehlt, und die Standardbibliotheken haben die üblichen Vorteile, extrem gut getestet, dokumentiert und stabil zu sein.
quelle
Java unterstützt zwei Methoden zum sofortigen Parsen von XML.
SAXParser
Sie können diesen Parser verwenden, wenn Sie große XML-Dateien analysieren und / oder nicht viel Speicher verwenden möchten.
http://download.oracle.com/javase/6/docs/api/javax/xml/parsers/SAXParserFactory.html
Beispiel: http://www.mkyong.com/java/how-to-read-xml-file-in-java-sax-parser/
DOMParser
Sie können diesen Parser verwenden, wenn Sie XPath-Abfragen durchführen müssen oder das vollständige DOM verfügbar sein müssen.
http://download.oracle.com/javase/6/docs/api/javax/xml/parsers/DocumentBuilderFactory.html
Beispiel: http://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/
quelle
Wenn Sie eine DOM-ähnliche API wünschen, dh eine, bei der der XML-Parser das Dokument in einen Baum von Element- und Attributknoten verwandelt, stehen mindestens vier zur Auswahl: DOM selbst, JDOM, DOM4J und XOM. Der einzig mögliche Grund für die Verwendung von DOM besteht darin, dass es als Standard wahrgenommen und im JDK bereitgestellt wird: Im Übrigen sind alle anderen überlegen. Meine eigene Präferenz für die Kombination von Einfachheit, Leistung und Leistung ist XOM.
Natürlich gibt es auch andere Verarbeitungsstile: Parser-Schnittstellen auf niedriger Ebene (SAX und StAX), Datenobjekt-Bindungsschnittstellen (JAXB) und deklarative Sprachen auf hoher Ebene (XSLT, XQuery, XPath). Welches für Sie am besten geeignet ist, hängt von Ihren Projektanforderungen und Ihrem persönlichen Geschmack ab.
quelle
Nikitas Argument ist ausgezeichnet: Verwechseln Sie nicht reif mit schlecht. XML hat sich nicht viel geändert.
JDOM wäre eine weitere Alternative zu DOM4J.
quelle
Sie benötigen keine externe Bibliothek zum Parsen von XML in Java. Java verfügt seit Ewigkeiten über integrierte Implementierungen für SAX und DOM.
quelle
Für Leute, die an der Verwendung von JDOM interessiert sind, aber befürchten, dass dies seit einiger Zeit nicht mehr aktualisiert wurde (insbesondere ohne Java-Generika), gibt es eine Abzweigung namens CoffeeDOM, die genau diese Aspekte berücksichtigt und die JDOM-API modernisiert. Lesen Sie hier mehr:
http://cdmckay.org/blog/2011/05/20/introducing-coffeedom-a-jdom-fork-for-java-5/
und laden Sie es von der Projektseite herunter unter:
https://github.com/cdmckay/coffeedom
quelle
VTD-XML ist die leistungsstarke XML-Parsing-Bibliothek. Sie ist in nahezu jeder Hinsicht besser als andere. Hier ist ein Artikel aus dem Jahr 2013, in dem alle auf der Java-Plattform verfügbaren XML-Verarbeitungsframeworks analysiert werden.
http://sdiwc.us/digitlib/journal_paper.php?paper=00000582.pdf
quelle