我已经开始在Java中使用VTD(我想是VTD-XML),对于XPath来说,它是非常好的。我现在遇到的问题是插入数据。可以说我正在执行以下操作:
VTDNav nav = preExistingGen.getNav();
AutoPilot pilot = new AutoPilot(nav);
pilot.selectXPath("/Something/SomethingElse");
if (pilot.evalXPath() != -1) {
XMLModifier modifier = new XMLModifier(nav);
modifier.insertAfterElement("content");
}
我以为这是实时更新,将反映在VTDNav中。看来我的理解是错误的,因为仅插入元素内容对导航没有任何作用(如果我输出VTDNav,它仍然包含我的原始xml)。我似乎可以获取新xml句柄的唯一方法是从XMLModifier输出它。
modifier.outputAndReparse(); // Gives me a new VTDNav with the new content
我在这里想念什么吗?有更简单的方法吗?我希望能够插入新内容,然后立即获得新索引。我现有的代码(使用标准DOM类)具有大量的插入和更新,并且我还需要知道最后插入的元素在文档中的位置。每次都要输出AndReparse()然后找到插入的元素(我什至无法保证)似乎不是一个可行的解决方案。
似乎没有一个很好的解决方案,我可以在任何地方找到。 由于我的代码涉及创建新文档,因此我采用了一种混合方法-使用vtd对输入文档进行读取,并使用DOM对输出文档进行写入。
+1,我还决定使用VTD来阅读和浏览文档,但是使用DOM对其进行修改。
我认为答案是仔细计划修改和随后对新内容的访问。如果插入新内容,然后尝试立即访问新内容,则可以使用insertAndParse()。但是正如您所看到的,由于重新解析,它的速度相当慢。我的建议是您计划一次全部插入,然后一次调用一次重新解析,这样一来,效率会大大提高。
精神是VTD-XML并不是要成为DOM,它有自己的优点和缺点...这是缺点之一,但是您可以解决它...
当您尝试合并多个xml文件时,vtd-xml肯定会发光。
另外,如果您使用vtd-xml标记此问题,我将能够更加轻松地找到它。
modifier.remove():
在文本文件中存储的xpaths号为val,因此为每个xpath生成一个新的输出xxx.xml文件。当您使用xml修饰符先前的数据与当前数据一起使用时,它将写入xxx.xml文件中,以便消除先前的数据,并且仅针对当前xpath数据更改写入新的xxx.xml文件,因此可以使用修饰符.remove( );
xm2.output( new FileOutputStream("/home/cupola-hadoop-project/TotalEnvironment/document/link/"+j+"101new.xml"));
xm2.remove();
并将循环旋转所需的时间。
对不起,我不明白这个答案。 同样,阅读XMLModifier.remove()描述会产生"从主XML文档中删除内容"。 我需要完整的文档以及可导航的新内容-也许我当时并不清楚。 感谢您的输入!
本文探讨了在Java中使用VTD-XML进行XML解析的优势与局限性,特别是关于XML数据的实时更新与索引问题。作者分享了如何有效结合VTD-XML与DOM来提高XML文档的处理效率。
4313

被折叠的 条评论
为什么被折叠?



