大型 XML 文件生成器的最佳实践
Best Practice for large XML file builder
我必须为 Java 中的 SOAP 服务输入构建一个 XML 文件。输入 xml 可以包含至少 1000 个标签。构建 XML 的最佳方法是什么?我有 XSD 文件,但使用 JAXB 有点复杂。 XMLStreamWriter 是一个好的选择吗?
XMLStreamWriter 是更好的 API 之一,用于从 Java 应用程序写入 XML,但它有一些怪癖(例如它的命名空间处理有点奇怪),你可能会发现将它包装在一个方便的 API 中是值得的,它知道你正在编写的文档类型,例如它使用什么命名空间。
XMLStreamWriter 接口的优点之一是有很多实现可供选择。例如,Saxon 有一个实现,可以让您完全控制所有 XSLT/XQuery 序列化选项和 Saxon 扩展(例如,您甚至可以控制属性的输出顺序!)
我遇到的所有基于事件的 APIs 的问题之一是迟早你会发现自己忘记写一个结束标记,这可能很难调试。使用包装器 API 强制您在对 endElement() 的调用中包含元素名称对于调试很有用;如果打开了调试,您可以保留一堆元素名称并检查 endElement() 是否写入了正确的标记;关闭调试后,您只需删除此检查即可。
当然,使用 JAXB 进行序列化是更高级别的,但缺点是它给您的控制较少。
我必须为 Java 中的 SOAP 服务输入构建一个 XML 文件。输入 xml 可以包含至少 1000 个标签。构建 XML 的最佳方法是什么?我有 XSD 文件,但使用 JAXB 有点复杂。 XMLStreamWriter 是一个好的选择吗?
XMLStreamWriter 是更好的 API 之一,用于从 Java 应用程序写入 XML,但它有一些怪癖(例如它的命名空间处理有点奇怪),你可能会发现将它包装在一个方便的 API 中是值得的,它知道你正在编写的文档类型,例如它使用什么命名空间。
XMLStreamWriter 接口的优点之一是有很多实现可供选择。例如,Saxon 有一个实现,可以让您完全控制所有 XSLT/XQuery 序列化选项和 Saxon 扩展(例如,您甚至可以控制属性的输出顺序!)
我遇到的所有基于事件的 APIs 的问题之一是迟早你会发现自己忘记写一个结束标记,这可能很难调试。使用包装器 API 强制您在对 endElement() 的调用中包含元素名称对于调试很有用;如果打开了调试,您可以保留一堆元素名称并检查 endElement() 是否写入了正确的标记;关闭调试后,您只需删除此检查即可。
当然,使用 JAXB 进行序列化是更高级别的,但缺点是它给您的控制较少。