parsing string - Bester XML-Parser für Java




sax tutorial (8)

Ich muss kleinere (nur wenige MB, UTF-8 kodierte) XML-Dateien lesen, nach verschiedenen Elementen und Attributen suchen, vielleicht ein paar modifizieren und das XML wieder auf Platte schreiben (am besten mit einer schönen, eingerückten Formatierung) .

Was wäre der beste XML-Parser für meine Bedürfnisse? Es gibt viele zur Auswahl. Einige, die mir bekannt sind, sind:

Und natürlich der im JDK (ich benutze Java 6). Ich kenne Xerces, finde es aber klobig.

Empfehlungen?


Answers

Wenn Sie weniger Wert auf Leistung legen, bin ich ein großer Fan von Apache Digester, da Sie im Wesentlichen direkt von XML zu Java Beans mappen können.

Andernfalls müssen Sie zuerst analysieren und dann Ihre Objekte konstruieren.


Ich denke, Sie sollten keine spezielle Parser-Implementierung in Betracht ziehen. Mit der Java-API für die XML-Verarbeitung können Sie jede konforme Parserimplementierung standardmäßig verwenden. Der Code sollte viel portabler sein, und wenn Sie feststellen, dass ein bestimmter Parser zu alt geworden ist, können Sie ihn durch einen anderen ersetzen, ohne eine Zeile Ihres Codes zu ändern (wenn Sie es richtig machen).

Grundsätzlich gibt es drei Möglichkeiten, XML auf eine Standard-Art zu behandeln:

  • SAX Dies ist die einfachste API. Sie lesen den XML-Code, indem Sie eine Handler-Klasse definieren, die die Daten in Elementen / Attributen empfängt, wenn der XML-Code seriell verarbeitet wird. Es ist schneller und einfacher, wenn Sie nur einige Attribute / Elemente lesen und / oder einige Werte zurückschreiben wollen (Ihren Fall).
  • DOM Diese Methode erstellt eine Objektbaumstruktur, in der Sie sie nach dem Zufallsprinzip ändern / darauf zugreifen können, so dass sie besser für komplexe XML-Manipulationen und -Behandlungen geeignet ist.
  • StAX Dies ist in der Mitte des Pfades zwischen SAX und DOM. Sie schreiben einfach Code, um die Daten aus dem Parser zu holen, an dem Sie bei der Verarbeitung interessiert sind.

Vergessen Sie proprietäre APIs wie JDOM oder Apache (z. B. Apache Xerces XMLSerializer ), da Sie an eine bestimmte Implementierung gebunden sind , die sich mit der Zeit weiterentwickeln oder die Abwärtskompatibilität verlieren kann. Dadurch werden Sie Ihren Code in Zukunft ändern, wenn Sie ein Upgrade durchführen möchten eine neue Version von JDOM oder welchen Parser Sie auch verwenden. Wenn Sie sich an die Java-Standard-API (mithilfe von Factories und Schnittstellen) halten, wird Ihr Code viel modularer und wartbarer.

Es gibt keine Notwendigkeit zu sagen, dass alle (ich habe nicht alle überprüft, aber ich bin mir fast sicher) der vorgeschlagenen Parser einer JAXP-Implementierung entsprechen, so dass Sie technisch alles verwenden können, egal welche.



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 Dinge zu erledigen, und Sie müssen sich daran gewöhnen, XML in Streams zu verarbeiten.


Ich würde das nicht empfehlen, wenn Sie in Ihrer App viel "nachdenken", aber die Verwendung von XSLT könnte besser (und möglicherweise schneller mit XSLT-zu-Bytecode-Kompilierung) als Java-Manipulation sein.


Zusätzlich zu SAX und DOM gibt es STaX-Parsing mit XMLStreamReader, einem xml Pull-Parser.



Eine Methode ist parseInt (String), die ein primitives int zurückgibt

String number = "10";
int result = Integer.parseInt(number);
System.out.println(result);

Die zweite Methode ist valueOf (String) gibt ein neues Integer () - Objekt zurück.

String number = "10";
Integer result = Integer.valueOf(number);
System.out.println(result);




java xml parsing