2009-07-27 3 views
0

Was ist der schnellste Weg, um dem Wurzelelement einer umfangreichen XML-Datei ein Attribut hinzuzufügen? Diese Dateien sind zu groß, um in den Speicher gelesen zu werden, und ich möchte so viel wie möglich von einer I/O-Strafe vermeiden.Der effizienteste Weg, Attribute zum Starten einer umfangreichen XML-Datei in Java hinzuzufügen?

+0

ist dies eine neu definierte att oder eine als optional definiert, aber nicht bevölkert att? – akf

+0

Neu definiertes Attribut - speziell das Namespace-Attribut, damit JAXB das Objekt entpacken kann. – Brian

+0

Seien Sie vorsichtig bei der Behandlung von Namespace-Deklarationen als Attribute. Parser behandeln sie besonders und geben diese Informationen möglicherweise nicht als Attribute an die API weiter. – skaffman

Antwort

5

Sie werden die ganze Datei sowieso nicht neu schreiben müssen, wenn Sie Text am oder nahe dem Anfang einfügen? Ein SAX-Parser sollte an Eingabepuffer (über einen InputStream) angepasst werden können, wenn Sie nicht alle gleichzeitig im Speicher haben möchten.

Sie werden immer noch den Hit der Neuschreiben der gesamten Datei, aber nicht der Speichertreffer auf einmal in den Speicher zu nehmen. Im Grunde werden Sie die Datei analysieren, die SAX-Ereignisse abhören und die neue Datei aus diesen Ereignissen herausschreiben. Ihr SAX-Parser wird dann auch auf die richtigen Umstände achten, um ein Attribut hinzuzufügen.

+0

Ausgezeichnete Antwort :) –

0

Es ist praktisch unmöglich, die Datei in Java nicht neu zu schreiben (ich glaube nicht, dass Sie das tun könnten, wenn Sie die Dateien auf Systemebene optimieren würden, aber vielleicht ...) - Ihre Frage wird also effizienteste Möglichkeit, die Datei neu zu schreiben?

Wenn möglich, würde ich alle XML-Parser vermeiden und meine eigenen schreiben. Dies würde erfordern, dass Sie leicht identifizieren können, wo in der Datei dieses neue Attribut abgelegt werden muss. Wenn Sie die passende Zeichenfolge finden, können Sie nach und nach einlesen, nach dem Einfügepunkt suchen und einfach Ihre zusätzlichen Daten eingeben, wenn Sie dort angekommen sind, und dann den Rest kopieren.

Verwandte Themen