【问题标题】:There is a Java Library for splitting a large XML file into smaller valid XML with a max KB size?有用于将大型 XML 文件拆分为最大 KB 大小的较小有效 XML 的 Java 库吗?
【发布时间】:2022-07-21 17:47:44
【问题描述】:

我需要找到一个 java 库,该库具有构建服务的方法,该服务能够获取非常大且复杂的 XML(使用 XSD)并将其拆分为具有定义大小(例如 200KB x 文件)的较小 XML。

有没有图书馆可以做到这一点? 或者也许 github 上已经有一些代码可以做到这一点?

【问题讨论】:

  • 您是否考虑过将 XML 序列化为另一种数据格式(例如二进制),拆分该二进制文件,并在发送所有片段时重新构建它?

标签: java xml xsd


【解决方案1】:

没有自动方法可以将一个大 xml 拆分为几个较小的 xml。

作为一种极端的简化,单个 xml 表示具有属性的单个对象。 将其拆分为不同的 xml 意味着将单个对象拆分为多个对象。这不是可以自动完成的。

让我们举一个简单的例子。想象一下有这个xml

<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

你是怎么分割的?以下是拆分它的有效方法吗? (如何拆分和重组是业务决策)。

<note>
  <to>Tove</to>
  <from>Jani</from>
</note>

<note>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

如果问题与将大 xml 拆分为较小的 xml 无关,而是将单个大文件拆分为较小的文件,您可以将其拆分为

<note>
  <to>Tove</to>
  <from>Jani</from>

  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

但如果问题是通过 Internet 发送文件的大小或保存时节省空间,请考虑压缩它。压缩 xml 文件会产生非常小的压缩结果。最终您可以拆分压缩文件。

如果问题在于将整个文件保存在内存中,请不要这样做。使用 SAX 解析器而不是 DOM 解析器,这样您就可以将原始 xml 的一小部分保存在内存中。 Sax parser 是:

SAX(XML 的简单 API)是一种用于解析 XML 文档的事件驱动在线算法,其 API 由 XML-DEV 邮件列表开发。@987654322 @SAX 提供了一种从 XML 文档中读取数据的机制,它可以替代文档对象模型 (DOM) 提供的机制。 DOM 对整个文档进行操作——为方便用户构建 XML 文档的完整抽象语法树——SAX 解析器按顺序对 XML 文档的每一部分进行操作,发出解析事件,同时进行一次传递[需要澄清] 通过输入流。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多