【问题标题】:Best Practice for large XML file builder大型 XML 文件构建器的最佳实践
【发布时间】:2016-06-06 23:49:10
【问题描述】:

我必须为 Java 中的 SOAP 服务的输入构建一个 XML 文件。输入 xml 至少可以包含 1000 个标签。构建 XML 的最佳方法是什么?我有 XSD 文件,但使用 JAXB 有点复杂。 XMLStreamWriter 是一个不错的选择吗?

【问题讨论】:

  • 如果您有 XSD 文件,您可以使用 JAXB 片段和流以及对象的迭代器。如果有兴趣,我会发布代码。
  • 这取决于有多少信息可能会改变。如果它只有数千人更改的一行,那么静态文件可能是最好的解决方案。平均而言,我建议使用 freemarker 进行修改,只有在进行大量修改时,才应该使用复杂的框架作为解决方案。
  • xml 文件有多大?你可以为 jvm 分配多少堆内存?
  • 当您说 1000 个标签时,您是指总共 1000 个元素,还是 1000 个不同的元素名称? (因为在我的书中总共 1000 个元素是一个小的 XML 文件......)
  • 文件最大为 50 KB。我尝试使用 XMLStreamWriter 构建,但代码看起来有点难以阅读。

标签: java xml xml-parsing jaxb xmlstreamwriter


【解决方案1】:

XMLStreamWriter 是用于从 Java 应用程序编写 XML 的更好的 API 之一,但它有一些怪癖(例如,它的命名空间处理有点奇怪),您可能会发现将它包装在一个方便的 API 中是值得的了解您正在编写的文档类型,例如它使用什么命名空间。

XMLStreamWriter 接口的优点之一是有很多实现可供选择。例如,Saxon 的实现让您可以完全控制所有 XSLT/XQuery 序列化选项以及 Saxon 扩展(例如,您甚至可以控制属性的输出顺序!)

我在使用所有基于事件的 API 时遇到的一个问题是,您迟早会发现自己忘记编写结束标记,而这可能很难调试。使用强制您在调用 endElement() 时包含元素名称的包装 API 对调试很有用;如果调试已打开,您可以保留一堆元素名称并检查 endElement() 是否正在编写正确的标签;关闭调试后,您只需放弃此检查。

当然,使用 JAXB 进行序列化是更高级别的,但缺点是它给您的控制较少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-25
    • 2023-02-05
    • 2011-05-09
    • 1970-01-01
    • 2015-08-21
    • 2011-11-26
    • 2015-03-25
    • 1970-01-01
    相关资源
    最近更新 更多