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

时间:2015-12-17 03:32:33

标签: java xml vtd-xml

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

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

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");
}

1 个答案:

答案 0 :(得分:0)

XMLModifier是实现VTD-XML唯一增量更新功能的方法集合。

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

XMLModier最重要的概念是

  1. 每个偏移值一次操作:在同一偏移处的两次重复操作将导致异常。
  2. 不会立即更改内容更改:它仅标记更改并在XMLModifier内部保留其记录。输出XML仅通过调用output()方法生成。
  3. VTDNav对象中包含的原始输入XML文档保持不变。
  4. 基本上,您可以根据需要标记任意数量的更改,但是您需要明确要求将这些更改推送到输出。输入XML没有变化。

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

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

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