如何保存不断更新并最终使用 XMLModifier 将输出保存为文件
How can you save the constant update and the finally save the output as a file with XMLModifier
我有不同的方法尝试 update/remove elements/tokens 基于路径。
现在,每个方法,编辑完成后,直接保存为文件,
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)。
What I want: Call the method to update the token based on the path, save the update, and call the method again with another path, and finally after finishing the update, save into the file.
如果我有任何错误请告诉我,因为我对 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独有的增量更新能力的方法集合。
要更新 XML 的内容,您首先必须将 VTDNav 的实例附加到 XMLModifier 对象。您可以对 XML 文档应用三种类型的操作:删除、插入和更新(同时删除和插入)。
XMLModier 最重要的概念是
- 每个偏移值一个操作:在相同的偏移处重复两次操作将导致异常。
- 任何内容更改都不会立即生效:它只是标记更改并在 XMLModifier 内部保留它的记录。输出 XML 仅通过调用 output() 方法生成。
- 包含在 VTDNav 对象中的原始输入 XML 文档保持不变。
基本上,您可以根据需要标记任意数量的更改,但您需要明确要求将这些更改推送到输出。输入 XML 没有变化。
所以我认为您需要将 output() 方法移出 updateToken 方法,而是在所有 updateToken 调用之后在更高级别的过程中调用它。换句话说,您的 updateToken() 应该只标记更改,而不是推送到输出。
另一个相关点:调用XMLModifier的reset()方法可以删除所有标记。这将帮助您重用 XML修饰符以将一组新操作应用于输入文档。
关于outputAndParse()的目的,基本上是为了减少输出新文档然后立即解析它的编码工作量。但是这个方法有一个缺点,因为它是一个相对 slow/heavy 的调用方法。所以考虑谨慎使用它。如果您尝试对文档内容应用多批更改,请在调用 outputAndParse() 之前一次性完成。
我有不同的方法尝试 update/remove elements/tokens 基于路径。
现在,每个方法,编辑完成后,直接保存为文件,
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)。
What I want: Call the method to update the token based on the path, save the update, and call the method again with another path, and finally after finishing the update, save into the file.
如果我有任何错误请告诉我,因为我对 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独有的增量更新能力的方法集合。
要更新 XML 的内容,您首先必须将 VTDNav 的实例附加到 XMLModifier 对象。您可以对 XML 文档应用三种类型的操作:删除、插入和更新(同时删除和插入)。
XMLModier 最重要的概念是
- 每个偏移值一个操作:在相同的偏移处重复两次操作将导致异常。
- 任何内容更改都不会立即生效:它只是标记更改并在 XMLModifier 内部保留它的记录。输出 XML 仅通过调用 output() 方法生成。
- 包含在 VTDNav 对象中的原始输入 XML 文档保持不变。
基本上,您可以根据需要标记任意数量的更改,但您需要明确要求将这些更改推送到输出。输入 XML 没有变化。
所以我认为您需要将 output() 方法移出 updateToken 方法,而是在所有 updateToken 调用之后在更高级别的过程中调用它。换句话说,您的 updateToken() 应该只标记更改,而不是推送到输出。
另一个相关点:调用XMLModifier的reset()方法可以删除所有标记。这将帮助您重用 XML修饰符以将一组新操作应用于输入文档。
关于outputAndParse()的目的,基本上是为了减少输出新文档然后立即解析它的编码工作量。但是这个方法有一个缺点,因为它是一个相对 slow/heavy 的调用方法。所以考虑谨慎使用它。如果您尝试对文档内容应用多批更改,请在调用 outputAndParse() 之前一次性完成。