Ich muss kleinere (höchstens wenige MB, UTF-8-codierte) XML-Dateien lesen, verschiedene Elemente und Attribute durchsuchen, möglicherweise einige ändern und das XML wieder auf die Festplatte schreiben (vorzugsweise mit netter, eingerückter Formatierung). .
Was wäre der beste XML-Parser für meine Anforderungen? Es gibt viele zur Auswahl. Einige, die mir bekannt sind, sind:
Und natürlich die im JDK (ich benutze Java 6). Ich bin mit Xerces vertraut, finde es aber klobig.
Empfehlungen?
Antworten:
Wenn Geschwindigkeit und Speicher kein Problem sind, ist dom4j eine wirklich gute Option. Wenn Sie Geschwindigkeit benötigen, ist die Verwendung eines StAX-Parsers wie Woodstox der richtige Weg, aber Sie müssen mehr Code schreiben, um die Dinge zu erledigen, und Sie müssen sich daran gewöhnen, XML in Streams zu verarbeiten.
quelle
Ich denke, Sie sollten keine bestimmte Parser-Implementierung in Betracht ziehen. Mit der Java-API für die XML-Verarbeitung können Sie jede konforme Parser-Implementierung auf standardmäßige Weise verwenden. Der Code sollte viel portabler sein. Wenn Sie feststellen, dass ein bestimmter Parser zu alt geworden ist, können Sie ihn durch einen anderen ersetzen, ohne eine Codezeile zu ändern (wenn Sie dies richtig machen).
Grundsätzlich gibt es drei Möglichkeiten, XML standardmäßig zu behandeln:
Vergessen Sie proprietäre APIs wie JDOM- oder Apache-APIs (z. B. Apache Xerces XMLSerializer ), da Sie an eine bestimmte Implementierung gebunden sind , die sich im Laufe der Zeit weiterentwickeln oder die Abwärtskompatibilität verlieren kann, sodass Sie Ihren Code in Zukunft ändern können, wenn Sie ein Upgrade durchführen möchten eine neue Version von JDOM oder einem von Ihnen verwendeten Parser. Wenn Sie sich an die Java-Standard-API halten (mithilfe von Fabriken und Schnittstellen), ist Ihr Code wesentlich modularer und wartbarer.
Es muss nicht gesagt werden, dass alle (ich habe nicht alle überprüft, aber ich bin mir fast sicher) der vorgeschlagenen Parser einer JAXP-Implementierung entsprechen, sodass Sie technisch alle verwenden können, egal welche.
quelle
Hier ist ein schöner Vergleich zu DOM, SAX, StAX & TrAX (Quelle: http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html )
API-Typ Pull, Streaming Push, Streaming Im Speicherbaum XSLT-Regel
Benutzerfreundlichkeit Hoch Mittel Hoch Mittel
XPath-Fähigkeit Nein Nein Ja Ja
CPU & Speicher Gut Gut Variiert Variiert
Nur weiterleiten Ja Ja Nein Nein
XML lesen Ja Ja Ja Ja
XML schreiben Ja Nein Ja Ja
CRUD Nein Nein Ja Nein
quelle
Einfaches XML http://simple.sourceforge.net/ ist sehr einfach zum (De-) Serialisieren von Objekten.
quelle
Zusätzlich zu SAX und DOM ist STaX-Parsing mit XMLStreamReader verfügbar, einem XML-Pull-Parser.
quelle
Ich habe festgestellt, dass dom4j das Werkzeug für die Arbeit mit XML ist. Besonders im Vergleich zu Xerces.
quelle
Ich würde nicht empfehlen, dass Sie viel "Nachdenken" in Ihrer App haben, aber die Verwendung von XSLT könnte besser (und möglicherweise schneller bei der Kompilierung von XSLT zu Bytecode) sein als die Java-Manipulation.
quelle
Wenn Sie sich weniger für die Leistung interessieren, bin ich ein großer Fan von Apache Digester, da Sie damit im Wesentlichen direkt von XML auf Java Beans abbilden können.
Andernfalls müssen Sie zuerst Ihre Objekte analysieren und dann konstruieren.
quelle