我必须对VTD-XML库进行性能测试,以便不仅进行简单的解析,而且在解析中进行额外的转换。所以我有30MB的输入XML,然后用自定义逻辑将其转换为其他XML。因此,我想消除所有的想法,这减缓了整个过程,从我这边来(因为没有很好地使用VTD库)。我试图搜索优化提示,但找不到。我认为:
'0'. 选择selectXPath或selectElement最好使用什么?
>
使用不带名称空间的解析要快得多。
File file = new File(fileName);
VTDGen vtdGen = new VTDGen();
vtdGen.setDoc_BR(new byte[(int) file.length()]);
vtdGen.parse(false);
从字节读取还是传递到VTDGen?
final VTDGen vg = new VTDGen();
vg.parseFile("books.xml", false);
或
// open a file and read the content into a byte array
File f = new File("books.xml");
FileInputStream fis = new FileInputStream(f);
byte[] b = new byte[(int) f.length()];
fis.read(b);
VTDGen vg = new VTDGen();
vg.setDoc(b);
vg.parse(true);
使用第二种方法-速度快0.01倍…(可以从任何地方)
与parseFile有什么区别,该文件被限制为2GB,名称空间感知为true,1GB无输出,但字节方法呢?
您可以要求VTDGen为下一个解析任务重用VTD缓冲区。否则,默认情况下,VTDGen将为每次解析运行分配新的缓冲区。
你能举个例子吗?
默认情况下,它是3。但您可以将其设置为5。当您的XML深度嵌套时,将LC级别设置为5会导致更好的XPath性能。但它会略微增加内存使用和解析时间。
VTDGen vg = new VTDGen();
vtdGen.selectLcDepth(5);
但有运行时异常。仅适用于3
使用VTD XML索引-您可以将XML预索引为VTD XML格式并将其转储到磁盘上,而不是在处理请求时解析XML文件。当处理请求开始时,只需在内存中加载VTD xml,瞧,就不再需要解析了!!
VTDGen vg = new VTDGen();
if (vg.parseFile(inputName,true)){
vg.writeIndex(new FileOutputStream(outputName));
}
有人知道如何使用它吗?如果文件发生变化会发生什么,如何触发新的重新索引。如果3GB中有10kb的变化,解析需要时间来解析整个新文件还是只解析更改的行?
覆盖功能又名。数据模板-由于VTD-XML按原样在内存中保留XML,您实际上可以创建一个模板XML文件(在VTD XML中预先索引),其值字段留空,并让您的应用程序填充空白,从而创建不需要解析的XML数据。
我认为您应该看看与vtd xml发布捆绑在一起的示例……并逐步积累专业知识……幸运的是,vtd xml在我看来是最简单的xml API之一……因此学习曲线不会有什么困难。
我对你上面的编号列表的回答。。。
>
打开命名空间感知对解析性能几乎没有影响...你能引用你100倍减速声明的来源吗?
你可以从字节中读取,也可以直接从文件中读取…这是一个博客帖子的链接
https://ximpleware.wordpress.com/2016/06/02/parsefile-vs-parse-a-quick-comparison/
3.缓冲区重用是一种高级功能...让我们稍后再谈
4.如果您获得了最新版本(2.13),那么该方法调用不会出现运行时异常。。。
要解析大于2GB的xml文档,需要切换到vtd xml的扩展版,这是一个与标准vtd xml捆绑在一起的单独API。。。
这里有一些与vtd xml发行版捆绑在一起的示例,您可能想先看一下……下面是一篇关于这个主题的文章http://www.codeproject.com/Articles/24663/Index-XML-Documents-with-VTD-XML
问题内容: 我如何在Java或C中使用vtd-xml解析如下的xml文件? 任何帮助,将不胜感激。 谢谢 问题答案: 我想其中有些取决于您要如何解析文件。 这是一个“非生产”示例,其中使用了一些有用的技术,包括: XPath选择(此处仅使用“ / *”) 浏览所有同级节点 通过子节点向下看 使用AutoPilot将节点属性提取到地图中 希望能帮助到你 产生以下输出: 添加带有AutoPilot循环
如何在java或C中使用vtd xml解析如下xml文件? 任何帮助都将不胜感激。 谢谢
为了在巨大的xml文件中执行XPATH查询,我阅读了许多喜欢VTD-xml的文章,因此我复制了这些文章中的代码: 但当我运行它时没有结果,所以这意味着XML文件没有映射到内存中。。。我的问题是如何在VTD-xml中强制映射xml文件?
VTD-XML是一种新的XML处理API,它能够克服DOM和SAX的一些问题。VTD-XML能够在内存中对XML进行快速检查并提供XPath查询支持。 在它的主页上有详细的API描述,源代码,文档和例子。
我有两个xml文件。一个是参考(旧)文件,另一个是测试(新)文件。根据提供给我的一些规则,我必须检查是否有东西从旧模型中删除,然后添加到新模型中,或者检查是否有东西从旧文件中删除到新文件中。 我使用的是VTD-XML,但DOM解决方案或任何其他与xpath一起使用的解决方案将非常有用。 这是java代码: 1) 在ref文件上完成xpath后,我得到man节点的所有属性: 我得到name属性的值。
有人能举一个例子,说明在VTD XML解析器中使用联合运算符(|)吗?以下内容不适用于VTD XML解析器,但适用于jxpath解析器/a |/b