Java 从XML中多次提取数据的最佳优化方法是什么?

Java 从XML中多次提取数据的最佳优化方法是什么?,java,performance,xml-parsing,string-parsing,Java,Performance,Xml Parsing,String Parsing,在我们的应用程序中,我们需要多次从XML检索数据。我们进行服务调用,以xml格式获取数据并保存在内存中。稍后,我们需要多次使用元素名或属性名检索数据,这使得每次都要解析xml,这不是一个好方法 我们只能将字符串保存在内存中,并且不能使用Spring或任何框架,因此我们可以将字符串保存为xml,或者将字符串转换为某种格式并解析该字符串。以下是我可以考虑的选项: 每次需要检索值时都要解析XML 使用解析器从XML中提取所需数据,并将其保存为字符串格式的映射,并使用自定义代码解析映射数据 将大XML转

在我们的应用程序中,我们需要多次从
XML
检索数据。我们进行服务调用,以
xml
格式获取数据并保存在内存中。稍后,我们需要多次使用元素名或属性名检索数据,这使得每次都要解析
xml
,这不是一个好方法

我们只能将字符串保存在内存中,并且不能使用Spring或任何框架,因此我们可以将字符串保存为
xml
,或者将字符串转换为某种格式并解析该字符串。以下是我可以考虑的选项:

  • 每次需要检索值时都要解析XML
  • 使用解析器从XML中提取所需数据,并将其保存为字符串格式的映射,并使用自定义代码解析映射数据
  • 将大XML转换为小XML,并每次解析小XML
  • 字符串拆分函数

  • 如果有人能建议从String中检索数据的快速方法,我将不胜感激。因此,我得到的印象是:您需要将XML文件的序列化内容存储在String类型的变量中,并且需要最快的方法来实现这一点

    假设不允许使用数组或字符串链表,则可以将XML转换为JSON,这比XML或任何其他序列化格式的解析速度快得多,更容易缓存,并且尺寸更小。生成的JSON将被缩小并存储在字符串中

    例如,XML

     <data>
        <list>
            <item>Item A</item>
            <item>Item B</item>
        </list>
    </data>
    
    请注意,这比XML小得多,特别是考虑到XML中只需要开始的“标记”,而不需要结束的标记。存储转换后的JSON数据的字符串将占用更少的内存(并且随着数据集的增大,保存的数据量将变得更加明显),并且解析速度将大大加快。此外,JSON是在线数据传输的标准,在许多领域都优于XML,特别是在更大的数据集或存储的对象具有相当高的复杂性的地方

    以下是有关此主题的更多阅读:

    JSON vs XML,从面向Web的角度看

    “JSON:XML的无脂肪替代品”

    JSON和XML之间的客观比较

    希望我能帮忙!如果你有任何问题,请告诉我

    编辑:
    我刚才看到您对您的问题的评论,您的XML存储了非常大的数据集。在这种情况下,我不建议使用任何形式的序列化,而是将数据存储在数据库中(对于您需要的数据,我认为像MongoDB这样的东西会工作得最好,因为它是非结构化的方法并且适合于大型数据集),并且只将您当前需要的记录提取到一个较小的JSON、XML字符串中,甚至是使用任何语言的类数组。

    将大型数据集转换为小型数据集。使用高效的序列化程序/解析器。执行拉式解析和序列化,避免对象绑定(DOM/带注释的对象)

    如果可能的话,在得到所需内容时停止解析。可能会安排您的数据,即排序,以实现这一点


    JSON或是次要的

    由于我是vtd xml的作者,我必须承认我的观点可能有偏见。但是VTD-XML非常适合您的用例

    让我进一步解释:

    *首先,解析不会像使用VTD-XML的DOM那样是一个大问题

    • 您还可以选择使用vtd xml的内置索引持久化解析结果。基本上,如果您可以重用相同的xml,而无需多次解析它。。。这是非常方便的。。。只需将.vxl文件加载到内存中。VTD-XML有两部分,XML(人类可读的文字XML)。另一个是二进制索引部分,作为解析的输出

    • 因为VTD-XML使用的内存比DOM少得多。你的第三点可能没有必要了

    • 此外,vtd xml的索引结构非常容易理解。它可以写在火柴盒的背面

    • 此外,如果您了解vtd xml的基本原理,vtd xml非常适合大xml拆分


    如果您有任何问题,请告诉我。

    您试过正则表达式吗?你能举一个xml的例子,说明你需要从中提取什么吗?我们有复杂的xml,可以有1000多行,下面是示例xml。abcdcdef。在一种情况下,我们需要提取firstname值,在另一种情况下,我们需要提取id。为什么在将数据保存为字符串时存在限制?也可能是字节[]?谢谢你,柏拉图。所以你建议转换成JSON格式,解析JSON字符串而不是xml?此外,我们正在调用服务调用来获取数据,并且在DB中存储数据对我们来说不是一个选项。@Mr9是的,我绝对建议转换为JSON格式并将其解析为JSON字符串,而不是直接解析XML。
    {"data":{"list":{"item":["a","b"]}}}