java - 大型xml文件转换技术?

标签 java xml xslt vtd-xml

在我们的组织中,我们有业务应用程序,它使用 xlst 来转换系统之间的数据已有 10 多年的历史。因此,随着时间的推移,这些文件转换:

XML->XSL->XML 变得非常耗时。

因此输入 XML 变为 100MB - 200MB。但现在我们有 2,3,4 GB 的 xml,主要是在系统同步期间,因此我们想用更先进的技术替换 xslt(版本 1.0)。在未来最大的数据结构中,这个数字甚至还会上升。

因此,我研究了不同的方法,但想知道哪种方法最好:

  1. 将 xslt 转换从版本 1.0 重写为 2.0(3.0?),并使用最快的处理器,以减少时间和内存消耗。(我们有超过 30 个转换,其中有 1000 行转换/模板规则。) xslt traformations的最佳实践.

enter image description here 2.使用Xquery进行转换。 Here据说,对于在大 xml 文件中搜索数据,XQuery 很好。但是我们需要转换整个 xml 并进行大的 xml 到 xml 转换。所以我想知道这是否好。

  • 使用VTD-XML世界上最快的 XML 解析器。 它具有对超过 2GB 的 XML 的 Java 支持

    VTDGenHuge vgh = new VTDGenHuge();

  • http://vtd-xml.sourceforge.net/codeSample/cs12.html

    com.ximpleware Standard VTD-XML supporting up to 2GB document size com.ximpleware.extended Extended VTD-XML supporting up to 256GB document size

  • 等等..
  • 最佳答案

    XSLT 3.0 正在开发中,但其新功能之一是 https://www.w3.org/TR/xslt-30/#streaming您可以在其中编写内存消耗有限的样式表,与 XSLT 1.0 和 2.0 相反,处理器不会构建输入的完整树,而是在处理每个节点时读取输入,仅保留该节点及其子树祖先。 Saxon 9 EE 实现了 http://saxonica.com/html/documentation/sourcedocs/streaming/ 。主要目的是允许您处理使用 XSLT 2.0 无法放入内存的非常大的输入文档,缺点是您只能使用一组有限的 XSLT 和 XPath,因此现有的 XSLT 样式表可能无法工作并且可能需要被重写为仅使用允许流处理的功能。

    关于java - 大型xml文件转换技术?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38786560/

    相关文章:

    xml - 在 XSL 中的一个选择中调用两次 translate()

    java - Maven JAR - 未找到类异常

    c# - 系统.Xml.XmlException : Unexpected end of file while parsing Name has occurred

    Java 程序从 XML 文件中可用的占位符获取变量名称

    xslt - xsl :for-each? 有什么不好的

    xslt - 如何在 apache fop 中使用 `xsl:include`

    java - Java中的正则表达式?

    java - 如何正确覆盖 ArrayList .remove() 方法

    java - 出现错误 : Exception in thread "main" java.net.SocketException:套接字已关闭

    c# - IDispatchMessageInspector 记录纯文本 SOAP 消息?