当前位置: 首页 > 知识库问答 >
问题:

VTD-XML解析优化?

杨起运
2023-03-14

我必须对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数据。

  • 共有1个答案

    丌官丰羽
    2023-03-14

    我认为您应该看看与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