java - 将大 XML 文件拆分为较小的文件

标签 java xml xslt

我目前正在开发一个需要拆分 XML 的项目。例如,这是一个示例:

<Lakes>
  <Lake>
    <id>1</id>
    <Name>Caspian</Name>
    <Type>Natyral</Type>
  </Lake>
  <Lake>
    <id>2</id>
    <Name>Moreo</Name>
    <Type>Glacial</Type>
  </Lake>
  <Lake>
    <id>3</id>
    <Name>Sina</Name>
    <Type>Artificial</Type>
  </Lake>
</Lakes>

现在,在我的 java 代码中,理想情况下会发生的情况是,对于本示例,它将把 XML 分成 3 个小部分,并使用信使服务将每个部分发送出去。消息服务的代码并不重要。我已经完成了。

例如,代码将运行,将第一部分拆分为:

<Lakes>
  <Lake>
    <id>1</id>
    <Name>Caspian</Name>
    <Type>Natyral</Type>
  </Lake>
</Lakes>

然后 java 代码会在消息中将其发送出去。然后它会转到下一部分,将其发送出去等等,直到到达大 XML 的末尾。这可以通过 XSLT 或通过 java 来完成,没关系。有什么想法吗?

为了说清楚,我非常知道如何使用 XSLT 分解文件,但我不知道如何分解它并一次单独发送每个部分。我也不想在本地存储任何内容,因此理想情况下它们都会被传输到字符串中并发送出去。

最佳答案

如果对文件进行分块的方式是固定且已知的,最简单的解决方案是使用 SAX 或 StAX 以编程方式执行此操作。我个人更喜欢使用 StAX 来完成此类任务,因为代码通常更干净、更容易理解,但 SAX 也能同样出色地完成这项工作。

XSLT 是一个很棒的工具,但它的主要缺点是它只能产生一个输出。除了少数异常(exception),XSLT 引擎不支持流处理,因此如果初始文件太大而无法放入内存,则无法使用它们。

更新:在 XSLT 2.0 中 <xsl:result-document>可以用来生成多个输出文件,但是如果您想一张一张地获取 block 而不将它们存储在文件中,那么它并不理想。

关于java - 将大 XML 文件拆分为较小的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11352132/

相关文章:

xml - 为什么这个基于XML布局的Android应用程序崩溃?

xslt - XSLT轴可用于跨树的 sibling ?

javascript - 在 HTML 中的特定表格单元格中显示消息对话框

c++ - 有没有更好的设计模式/方法可以使用?

java - 删除 JSoup 抓取检索到的重复元素

java - 使用 Java 对 Javascript 进行静态分析

java - 删除 Java 中的第一个空格

java - 尝试解析 XML 字符串时没有向我抛出协议(protocol)格式错误的 URL 异常

optimization - 这个 XSLT 效率低吗?

java - 替换字符串中的连续字符