如何保存常量更新,最后将输出保存为XMLModifier文件

我有不同的方法尝试根据路径更新/删除元素/令牌。

现在,每个方法在完成编辑后,立即保存为文件,

VTDGen vg = new VTDGen(); vg.parseFile("input.xml", false); vn.getNav(); AutoPilot ap = new AutoPilot(vn); XMLModifier xm; public void updateToken(String path) { xm = new XMLModifier(vn); ap.selectXPath(path); ...... xm.updateToken(i,"hello"); ...... xm.output("output.xml"); } 

如果我继续再次调用此方法,它会保存,但它会用新的更改覆盖文件,我不希望这样,所以我该怎么做?

我也试过用

 xm.outputAndReparse(); 

我将更新保存回NTDNav vnNTDNav vn用其余方法,但它会破坏方法移动到节点的其余部分(使用AutoPilot)。

我想要的:调用方法根据路径更新令牌,保存更新,并使用另一个路径再次调用该方法,最后在完成更新后,保存到文件中。

如果我有任何错误,请告诉我,因为我还是VTD-XML的新手。 谢谢。


搞定了,这就是我所做的。

 VTDGen vg = new VTDGen(); vg.parseFile("input.xml", false); vn.getNav(); AutoPilot ap = new AutoPilot(vn); XMLModifier xm = new XMLModifier(vn); public void output() { .... xm.output("output.xml"); .... } public void updateToken(String path) { ap.selectPath(path); ......... xm.updateToken(i,"hello"); } 

XMLModifier是一组实现VTD-XML独特增量更新function的方法。

要更新XML的内容,首先必须将VTDNav的实例附加到XMLModifier对象。 您可以对XML文档应用三种类型的操作:删除,插入和更新(同时删除和插入)。

XMLModier最重要的概念是

  1. 每个偏移值一次操作:在相同偏移处的两次重复操作将导致exception。
  2. 不会立即更改内容更改:它仅标记更改并在XMLModifier内部保留其记录。 输出XML仅通过调用output()方法生成。
  3. 包含在VTDNav对象中的原始输入XML文档保持不变。

基本上,您可以根据需要标记任意数量的更改,但是您需要明确要求将这些更改推送到输出。 输入XML没有变化。

所以我认为你需要将output()方法移出updateToken方法,而是在所有updateToken调用之后在更高级别的过程中调用它。 换句话说,您的updateToken()应该只标记更改,而不是直接输出到输出。

另一个相关点:您可以通过调用XMLModifier的reset()方法删除所有标记。 这将帮助您重用XMLModifier以将一组新操作应用于输入文档。

至于outputAndParse()的目的,它基本上是为了减少输出新文档然后立即解析它的编码工作量。 但是这种方法有一个缺点,因为它是一种相对缓慢/沉重的调用方法。 所以考虑小心翼翼地使用它。 如果您尝试对文档内容应用多批更改,请在调用outputAndParse()之前立即执行此操作。