Java 如何使用XMLModifier保存持续更新和最终将输出保存为文件

Java 如何使用XMLModifier保存持续更新和最终将输出保存为文件,java,xml,vtd-xml,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

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

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

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
,并重用其余的方法,但它会破坏方法向节点的其余移动(使用自动驾驶仪)

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

如果我有任何错误,请务必告诉我,因为我对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()方法删除所有标记。这将帮助您重用XMLModifier,以便对输入文档应用一组新的操作


    至于outputAndParse()的目的,基本上是为了减少输出新文档然后立即对其进行解析的编码工作。但是这个方法有一个缺点,因为它调用起来比较慢/沉重。所以要谨慎地使用它。如果您试图对文档内容应用多批更改,请在调用outputAndParse()之前立即执行所有更改。

    XMLModifier是实现VTD-XML独特增量更新功能的方法集合

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

    XMLModier最重要的概念是

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

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

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


    至于outputAndParse()的目的,基本上是为了减少输出新文档然后立即对其进行解析的编码工作。但是这个方法有一个缺点,因为它调用起来比较慢/沉重。所以要谨慎地使用它。如果您试图对文档内容应用多批更改,请在调用outputAndParse()之前立即执行所有操作。

    是否尝试将每个更新保存到单独的文件中(每个xpath一个output.xml)?或者,是否尝试将每个基于路径的更新应用于同一个文件,并将所有更新聚合到一个输出中?@vtd xml author第二个选项。示例-如果我有两个要更新的路径,我调用第一个方法,返回更新的版本,然后去更新第二个路径,然后一旦完成,所有输出都将在单个文件上。简短的回答是:从updateToken方法中取出“xm.output()”并放入主方法,然后在调用所有updateToken方法之后。。作为对您问题的正式回答,我将写一个更详细的描述……您是否试图将每个更新保存到一个单独的文件中(每个xpath一个output.xml)?或者,是否尝试将每个基于路径的更新应用于同一个文件,并将所有更新聚合到一个输出中?@vtd xml author第二个选项。示例-如果我有两个要更新的路径,我调用第一个方法,返回更新的版本,然后去更新第二个路径,然后一旦完成,所有输出都将在单个文件上。简短的回答是:从updateToken方法中取出“xm.output()”并放入主方法,然后在调用所有updateToken方法之后。。我将写一个更详细的描述作为对y的正式回应