Schneller, einfacher XML-Parser [geschlossen]

8

Ich habe ein spezifisches Format-XML-Dokument, das ich gepusht bekommen werde. Dieses Dokument wird immer vom selben Typ sein, also ist es sehr streng.

Ich muss das analysieren, damit ich es in JSON umwandeln kann (naja, eine leicht bastardisierte Version, damit jemand anders es mit DOJO benutzen kann).

Meine Frage ist, soll ich einen sehr schnellen leichtgewichtigen (keine Notwendigkeit für SAX, etc.) XML-Parser (irgendwelche Ideen?) oder schreibe mein eigenes, im Grunde Umwandlung in einen StringBuffer und durch das Array drehen? Grundsätzlich gehe ich unter der Decke davon aus, dass sich alle HTML-Parser durch die Zeichenkette (oder den Speicherpuffer) drehen und analysieren werden, wodurch auf dem Weg eine Ausgabe erzeugt wird.

Danke

Bearbeiten

Das xml wird zwischen 3 4 Zeilen bis ca. 50 max (am äußersten) sein.

    
joe90 25.01.2010, 18:16
quelle

8 Antworten

10

Nein, Sie sollten nicht versuchen, dafür einen eigenen XML-Parser zu schreiben.

SAX selbst ist sehr leicht und schnell, weshalb ich mir nicht sicher bin, warum es zu viel ist. Auch die Verwendung eines String-Puffers wäre eigentlich viel weniger skalierbar als mit SAX, da SAX nicht benötigt, um die gesamte XML-Datei in den Speicher zu laden, um sie zu verwenden. Ich habe SAX verwendet, um durch Multigigabyte-XML-Dateien zu analysieren, die Sie nicht mit Zeichenfolgenpuffern auf einer 32-Bit-Maschine ausführen könnten.

Wenn Sie kleine Dateien haben und sich keine Gedanken über die Leistung machen müssen, schauen Sie sich das DOM an. Die Implementierung von Java kann etwas nervig sein (Sie erstellen ein Dokument mit einem DocumentBuilder, der aus einer DocumentBuilderFactory stammt)

Der Code zum Erstellen eines Dokuments aus einer Datei sieht folgendermaßen aus:

%Vor%

(Beachten Sie, dass das Speichern eines Verweises auf Ihren Dokument-Builder die Vorgänge beschleunigt, wenn Sie mehrere Dateien analysieren müssen)

Dann verwenden Sie die Funktion in org.w3c.dom .Document um den Inhalt zu lesen oder zu bearbeiten. Zum Beispiel getElementsByTagName ( ) gibt alle Elemente mit einem bestimmten Tag-Namen zurück.

    
Chad Okere 25.01.2010, 18:20
quelle
7

Es hängt wirklich von der Art von XML ab, die Sie analysieren. Ich würde Ihren eigenen Parser nicht schreiben, wenn es schon etwas gibt, das die Arbeit für Sie erledigt.

Die Wahl von SAX / DOM basiert wirklich auf dem, was Sie analysieren wollen. Sehen Sie sich dies an, um zu entscheiden, welches Sie verwenden sollen:

Ссылка

Auch wenn Sie kein SAX / DOM verwenden, stehen Ihnen immer noch einfache Optionen zur Verfügung, werfen Sie einen Blick auf Simple:)

Ссылка

Vielleicht möchten Sie auch STaX in Betracht ziehen.

    
Jon 25.01.2010 18:25
quelle
3

Vielleicht sollten Sie sich kXML 2 ansehen, einen kleinen XML-Pull-Parser, der speziell für eingeschränkte Umgebungen entwickelt wurde, um auf XML-Dateien für Java 2 Micro Edition-fähige Geräte zuzugreifen, diese zu parsen und anzuzeigen. Es funktioniert auch gut mit Java SE / EE ;-). Wie es für die Mikro-Edition konzipiert ist, ist es wirklich leicht (kleiner Platzbedarf) und IMHO wirklich einfach zu bedienen (viel einfacher als SAX / DOM etc. Zeug).

Aus meiner eigenen Erfahrung mit kXML 2: Ich habe es benutzt, um XML-Dateien zu analysieren, die größer als 1 GB sind - Wikipedia-Dumps und ich war sehr zufrieden mit der Leistung / Speicherverbrauch usw.

Endlich ;-) - Link: Ссылка

    
WildWezyr 25.01.2010 18:54
quelle
1

Sie können Dom4j / xstream verwenden, um das XML in ein äquivalentes Java-Modal zu lesen und dann JSONLIB zum Konvertieren in JSON zu verwenden.

    
Teja Kantamneni 25.01.2010 18:19
quelle
1

Müssen Sie wirklich irgendwelche Daten im XML-Dokument analysieren / manipulieren? Wenn nicht, könnten Sie einfach ein XSLT erstellen. Wirklich einfach, wirklich schnell.

    
Bal 14.10.2010 05:06
quelle
0

Verwenden Sie einen echten XML-Parser. Wenn Sie dies nicht tun, werden Sie wahrscheinlich gebissen werden, wenn sich etwas ändert. Das Dokument kann "sehr streng" sein, aber in zwei Jahren wird etwas wahrscheinlich neu strukturiert und es wird die Struktur ändern, so dass es mit einem XML-Parser zur selben Datenstruktur analysiert und einen Homebrew-String-Parser bricht.

>     
Quentin 25.01.2010 18:20
quelle
0

Das Parsen auf dem Backend und das Offenlegen von JSON ist wahrscheinlich der richtige Weg, so dass Sie allgemeine JSON-Daten haben, die Sie leicht in andere Quellen integrieren können, aber wenn Sie eine einfache Nachricht haben und dies der einzige Ort ist, an den Sie denken Wenn Sie JSON verwenden, können Sie versuchen, die Parsing-Client-Seite auszuführen. Dojo hat einen experimentellen clientseitigen XML-Parser

    
peller 25.01.2010 20:49
quelle
-1

Müssen Sie XML verwenden?

Ich fand heraus, dass mein eigenes benutzerdefiniertes Textformat viel schneller war als XML oder JSON mit den üblichen Paketen - sie waren schnell, aber indem ich mein eigenes Format kontrollierte und nur String-Parsing ausführte, konnte ich die Zeit reduzieren in zwei Hälften gegen die schnellste XML-Implementierung.

Offensichtlich funktioniert das nur, wenn Sie für Formate verantwortlich sind und nicht für Ihre Situation geeignet sind, aber für alle anderen in dieser Situation: denken Sie nicht, dass XML die absolut schnellste Option ist, die Sie haben. Es ist nicht.

    
Brian 17.06.2010 14:48
quelle

Tags und Links