有没有办法或如何防止VTD-XML上的一个偏移量发生多次变化?

时间:2016-02-17 06:43:54

标签: java vtd-xml

根据我之前提出的问题:How can you save the constant update and the finally save the output as a file with XMLModifier

我之前提到的问题是进行所有更新,最后通过xm.ouput("output.xml");

将其输出为XML

我知道你提到过:

  

每个偏移值一次操作:在同一偏移处的两次重复操作将导致异常

示例,我可能是一个我想编辑的路径列表,但我忘记了会有重复。我不会知道,直到出现错误并产生异常。

VTDGen vg = new VTDGen();
vg.parseFile("input.xml", false);
vn.getNav();
AutoPilot ap = new AutoPilot(vn);
XMLModifier xm = new XMLModifier(vn);

public void updateToken(String path, String value) 
{
    ap.selectPath(path);
    .........
    xm.updateToken(i,value);
}

public static void main(String args[])
{
   updateToken("/a/b/c", "hello");
   //updateToken("/a/b", "world");(*ignore)
   updateToken("/a/b/c", "john");
}

但是第二次更新有可能吗?通过覆盖,还是有一种方法来检查该点是否正在更新?有什么建议吗?

我有一个像这样的XML文件。

<a>
   <b>
      <c>value1</c>
   </b>
   <b>
      <c>value2</c>
   </b>
</a>

我决定使用第一个updateToken("/a/b/c", "hello")仅更新第二个C节点 - value2 - &gt;你好 并且下一个updateToken("/a/b/c", "john")更新两个C节点。我得到的输出是:

<a>
   <b>
      <c>john</c>
   </b>
   <b>
      <c>hello</c>
   </b>
</a>

后来产生了一个异常,我知道在同一个偏移上发生了两个操作。所以我想知道,是否有可能不进行第二次updateToken(),因为对该偏移量进行了一次更新

就像在开始标记之前搜索更新标记一样,如果没有,那么将会有一些更新......

1 个答案:

答案 0 :(得分:0)

如果在偏移值处有多个操作,则UpdateToken应抛出ModifyException。此外,以后的更新不会在XMLModifier中注册,也不会直接推送到输出。总的来说,请考虑捕获modifyException并在代码中处理它以解释操作重叠。