etwas verwandt mit: libxml2 from javaWarum syntax Parsing schneller als Dom Parsing? und wie funktioniert stax?
ja, diese Frage ist ziemlich langatmig - sorry. Ich habe so dicht wie möglich gehalten. Ich habe die Fragen gewürdigt, um einen Blick auf das Ganze zu erleichtern.
Warum Parsing schneller als Dom Parsing? Das einzige, was ich mir vorstellen kann, ist, dass Sie wahrscheinlich den Großteil der eingehenden Daten ignorieren und somit keine Zeit verschwenden, Teile des XML zu verarbeiten, die Sie nicht interessieren. IOW - nach dem Parsen mit SAX können Sie die ursprüngliche Eingabe nicht neu erstellen. Wenn Sie Ihren SAX-Parser so geschrieben haben, dass er jeden xml-Knoten berücksichtigt (und somit das Original wiederherstellen könnte), wäre es nicht schneller als DOM, oder?
Der Grund, den ich frage, ist, dass ich XML-Dokumente schneller zu analysieren versuche. Ich brauche Zugriff auf den gesamten XML-Baum NACH dem Parsen. Ich schreibe eine Plattform für die Integration von Drittanbieter-Diensten, damit ich nicht vorhersehen kann, welche Teile des XML-Dokuments benötigt werden und welche nicht. Ich kenne nicht einmal die Struktur des eingehenden Dokuments. Deshalb kann ich Jaxb oder Sax nicht benutzen. Der Speicherbedarf ist für mich kein Problem, da die XML-Dokumente klein sind und ich immer nur 1 im Speicher benötige. Es ist die Zeit, die es dauert, dieses relativ kleine XML-Dokument zu analysieren, das mich umbringt. Ich habe noch nie Stax benutzt, aber vielleicht muss ich weiter nachforschen, weil es der Mittelweg sein könnte? Wenn ich richtig verstehe, behält Stax die ursprüngliche XML-Struktur bei und verarbeitet die Teile, die ich bei Bedarf anfordere? Auf diese Weise könnte die ursprüngliche Parserzeit schnell sein, aber jedes Mal, wenn ich sie auffordere, einen Teil des Baums zu durchlaufen, den sie 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 an anderer Stelle beantwortet wurden).
update: Ich schrieb es in Sax und es analysiert Dokumente auf AVG 2.1 ms. Dies ist eine Verbesserung (16% schneller) über die 2,5 ms, dass dom fand, aber es ist nicht die Größe, die ich (et al) erraten haben
Dank würden Sie
Ich würde sagen, die Frage, welche schneller ist, ist irrelevant für Ihre Zwecke, weil Sie willkürliche Abfragen gegen den Baum machen müssen. Das bedeutet, dass Sie eine Darstellung der Struktur erstellen müssen und eine Möglichkeit haben, Abfragen dafür zu erstellen. Entweder verwenden Sie DOM/XPath oder Sie schreiben Ihre eigenen Entsprechungen. – Anon
Ich vermute jedoch, dass Ihr echtes Problem nicht SAX vs DOM per se ist, sondern wie Ihr System konfiguriert ist und/oder wie Sie auf die Daten zugreifen. Es sollte nicht so lange dauern, ein "kleines" Dokument mit DOM (oder einem der DOM-Äquivalente) zu analysieren. Haben Sie den Unterschied (den Sie sehen) zwischen SAX und DOM quantifiziert? – Anon
Ich habe den DOM-Ansatz quantifiziert. kleine (ca. 300k) XML-Dokumente. Die aktuelle Implementierung verwendet xerces-j und benötigt ca. 2,5 ms pro xml-Dokument auf einem 1,5-GHz-Rechner. zu quantifizieren Sax ist etwas abhängig davon, wie viel von dem xml Sie behalten und was Sie damit tun. Du hast recht - ich glaube nicht, dass Sax für mich funktionieren wird - die Frage war eher aus Neugierde. – andersonbd1