11 Stimmen

Warum ist Sax-Parsing schneller als Dom-Parsing? und wie funktioniert Stax?

Etwas verwandt mit: libxml2 von java

ja, diese Frage ist ziemlich langatmig - tut mir leid. Ich habe sie so knapp gehalten, wie ich es für möglich hielt. Ich habe die Fragen fett gedruckt, damit man sie leichter überfliegen kann, bevor man das Ganze liest.

Warum ist Sax-Parsing schneller als Dom-Parsing? Das Einzige, was mir dazu einfällt, ist, dass Sie mit Sax wahrscheinlich den Großteil der eingehenden Daten ignorieren und somit keine Zeit mit der Verarbeitung von Teilen der Xml verschwenden, die Sie nicht interessieren. IOW - nach dem Parsen mit SAX, können Sie nicht die ursprüngliche Eingabe neu erstellen. Wenn Sie Ihren SAX-Parser so schreiben würden, dass er jeden einzelnen Xml-Knoten berücksichtigt (und somit das Original wiederherstellen könnte), dann wäre er nicht schneller als DOM, oder?

Der Grund, warum ich frage, ist, dass ich versuche, Xml-Dokumente schneller zu analysieren. Ich muss Zugriff auf den gesamten XML-Baum haben, NACH dem Parsen. Ich schreibe eine Plattform für Dienste von Drittanbietern, in die ich mich einklinken kann, daher kann ich nicht vorhersehen, welche Teile des XML-Dokuments benötigt werden und welche nicht. Ich kenne nicht einmal die Struktur des eingehenden Dokuments. Aus diesem Grund kann ich weder jaxb noch sax verwenden. Der Speicherbedarf ist für mich kein Problem, da die Xml-Dokumente klein sind und ich jeweils nur eines im Speicher benötige. Es ist die Zeit, die ich brauche, um dieses relativ kleine Xml-Dokument zu parsen, die mich umbringt. Ich habe stax noch nie benutzt, aber vielleicht muss ich mich weiter damit beschäftigen, weil es ein guter Mittelweg sein könnte? Wenn ich es richtig verstehe, behält stax die ursprüngliche Xml-Struktur bei und verarbeitet die Teile, die ich bei Bedarf anfordere? Auf diese Weise kann die ursprüngliche Parse-Zeit schnell sein, aber jedes Mal, wenn ich es auffordere, einen Teil des Baums zu durchlaufen, den es noch nicht durchlaufen hat, findet die Verarbeitung statt?

Wenn Sie einen Link angeben, der die meisten Fragen beantwortet, werde ich Ihre Antwort akzeptieren (Sie müssen meine Fragen nicht direkt beantworten, wenn sie bereits anderswo beantwortet wurden).

Update: Ich habe es in Sax umgeschrieben und es parst Dokumente in durchschnittlich 2,1 ms. Das ist eine Verbesserung (16% schneller) gegenüber den 2,5 ms, die dom brauchte, aber es ist nicht die Größenordnung, die ich (et al) vermutet hätte

Gracias

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X