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

时间:2017-08-14 21:12:05

标签: java performance xml-parsing string-parsing

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

我们只限制在内存中保存为String,也不能使用Spring或任何框架,因此我们可以保存为xml或将String转换为某种格式并解析该String。这些是我能想到的选择:

  1. 每次我们需要检索值时解析XML。
  2. 使用解析器从XML中提取所需数据,并将其另存为String格式的地图,并使用自定义代码解析地图数据。
  3. 将大型XML转换为小型XML并每次解析该小型XML。
  4. 字符串拆分功能。
  5. 感谢是否有人可以建议快速从String

    中检索数据

3 个答案:

答案 0 :(得分:1)

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

让我解释一下:

*对于使用VTD-XML的DOM,首先解析不会是一个大问题。

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

  • 由于VTD-XML使用的内存远远少于DOM。你的观点#3可能变得没必要了。

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

  • 如果你了解它的基本原理,vtd-xml也非常适合Big xml拆分......

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

答案 1 :(得分:0)

所以这就是我得到的印象:您需要将XML文件的序列化内容存储在String类型的变量中,并且您需要以最快的方式执行此操作。

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

例如,XML

 <data>
    <list>
        <item>Item A</item>
        <item>Item B</item>
    </list>
</data>

可能会成为

{"data":{"list":{"item":["a","b"]}}}

注意比XML小得多,特别是考虑到只有开放的“标签”而不是关闭的标签,正如XML中所需要的那样。存储转换后的JSON数据的字符串将占用更少的内存(并且使用更大的数据集可以更加明显地保存数据量)并且解析起来要快得多。此外,JSON是在线数据传输的标准,并且在许多领域表现优于XML,尤其是在较大的数据集中或存储对象存在相当大的复杂程度时。

以下是关于此主题的更多内容:

JSON vs XML,面向Web的观点

https://www.w3schools.com/js/js_json_xml.asp

“JSON:XML的无脂替代”

http://www.json.org/xml.html

JSON和XML之间的客观比较

https://www.sitepoint.com/json-vs-xml/

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

修改 我刚刚看到你对你的问题的评论,你的XML存储了非常大的数据集。在这种情况下,我不建议使用任何类型的序列化,而是将数据存储在数据库中(对于您需要的东西,我认为像MongoDB这样的东西将是最好的,因为它具有非结构化方法和适用于大型数据集)并且仅提取您目前需要的记录为一个较小的JSON,XML字符串,甚至是您使用的任何语言的类数组。

答案 2 :(得分:0)

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

如果可能,请在您拥有所需内容时停止解析。可能会安排您的数据,即排序,以实现这一目标。

JSON或XML是次要的。