5 Stimmen

VTD-XML in Java - Indexsuche nach XMLModifier.insertAfterElement

Ich habe begonnen, VTD (ich schätze VTD-XML) in Java zu verwenden, und für XPath-Lesungen ist es ausgezeichnet. Wo ich jetzt auf ein Problem stoße, ist beim Einfügen von Daten. Sagen wir, ich tue das folgende:

VTDNav nav = preExistingGen.getNav();
AutoPilot pilot = new AutoPilot(nav);
pilot.selectXPath("/Something/SomethingElse");
if (pilot.evalXPath() != -1) {
  XMLModifier modifier = new XMLModifier(nav);
  modifier.insertAfterElement("<some>content</some>");
}

Ich war davon ausgegangen, dass es sich um eine Echtzeitaktualisierung handelt, die sich im VTDNav widerspiegeln würde. Es sieht so aus, als ob mein Verständnis falsch ist, da das einfache Einfügen des Elementinhalts nichts an der Navigation ändert (wenn ich die VTDNav ausgeben, enthält sie immer noch meine ursprüngliche XML). Der einzige Weg, den ich scheinen kann, um einen Griff auf die neue Xml zu bekommen, ist durch die Ausgabe von der XMLModifier.

modifier.outputAndReparse(); // Gives me a new VTDNav with the new content

Gibt es etwas, das ich hier übersehe? Gibt es eine einfachere Möglichkeit, dies zu tun? Ich wollte in der Lage sein, den neuen Inhalt einzufügen, und dann sofort den neuen Index erhalten. Mein vorhandener Code (mit den Standard-DOM-Klassen) hat eine Tonne von Einfügungen und Updates, und ich muss auch wissen, wo das letzte eingefügte Element im Dokument vorhanden war. Mit outputAndReparse() jedes Mal und dann finden Sie das eingefügte Element (die ich möglicherweise nicht einmal in der Lage, zu garantieren) scheint nicht wie eine plausible Lösung.

2voto

vtd-xml-author Punkte 3234

Ich denke, die Antwort ist, dass Sie Ihre Änderungen und den anschließenden Zugang zu neuen Inhalten sorgfältig planen müssen. Wenn Sie den neuen Inhalt einfügen und unmittelbar danach auf den neuen Inhalt zugreifen wollen, ist insertAndParse() der richtige Weg. Aber wie Sie sehen können, ist dies wegen des Reparierens ziemlich langsam. Mein Vorschlag ist, dass Sie so viel wie einfügen alle auf einmal zu planen, dann rufen Sie reparsing nur einmal, es wird viel effizienter sein, auf diese Weise.

Der Sinn ist, dass VTD-XML nicht versucht, DOM zu sein, es hat seine eigenen Stärken und Schwächen ... und dies ist eine der Schwächen, aber man kann sie umgehen ... Und wenn Sie versuchen, mehrere Xml-Dateien zusammenzuführen, wird vtd-xml sicherlich glänzen....

Wenn Sie diese Frage außerdem mit vtd-xml kennzeichnen, kann ich sie viel leichter finden.

0voto

C.Ranga Swamy Punkte 11
modifier.remove():

in der Textdatei gespeichert no.of xpaths, val so für jede xpath erzeugen eine neue Ausgabe xxx.xml Datei. wenn u verwenden xml Modifikator vorherigen Daten zusammen mit aktuellen Daten wird es in einer xxx.xml Datei so für die Beseitigung der vorherigen Daten und nur für aktuelle xpath Datenänderungen schreiben in die neue xxx.xml Datei so für die Verwendung der modifier.remove();

xm2.output( new FileOutputStream("/home/cupola-hadoop-project/TotalEnvironment/document/link/"+j+"101new.xml"));
xm2.remove();

und drehen Sie die Schleife beliebig oft.

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