我目前正在开发一个需要拆分 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/