我有不同的方法尝试根据路径更新/删除元素/令牌。
现在,每个方法在完成编辑后,立即保存为文件,
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 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");
}
答案 0 :(得分:0)
XMLModifier是实现VTD-XML唯一增量更新功能的方法集合。
要更新XML的内容,首先必须将VTDNav的实例附加到XMLModifier对象。您可以对XML文档应用三种类型的操作:删除,插入和更新(同时删除和插入)。
XMLModier最重要的概念是
基本上,您可以根据需要标记任意数量的更改,但是您需要明确要求将这些更改推送到输出。输入XML没有变化。
所以我认为你需要将output()方法移出updateToken方法,而是在所有updateToken调用之后在更高级别的过程中调用它。换句话说,你的updateToken()应该只标记更改,而不是直接输出到输出。
另一个相关点:您可以通过调用XMLModifier的reset()方法删除所有标记。这将帮助您重用XMLModifier以将一组新操作应用于输入文档。
对于outputAndParse()的目的,它基本上是减少输出新文档然后立即解析它的编码工作量。但是这种方法有一个缺点,因为它是一种相对缓慢/沉重的调用方法。所以考虑小心翼翼地使用它。如果您尝试对文档内容应用多批更改,请在调用outputAndParse()之前立即执行此操作。