java - 如何在 Java 中处理不断发展的 XML 模式

标签 java xml jaxb

如何在 Java 中处理不断变化的 XML 模式?我有一个用例,我必须在 Java 应用程序中支持一组旧的和不断发展的 XML 模式(即支持 Foo v1、v2、v3、v4、v5)。

我的用例包括 - 读取针对不同版本的 Foo XML 模式编写的所有 Foo XML 内容 - 合并可以使用不同版本的 OVAL XML 模式编写的 Foo XML 内容(即合并 Foo v1 和 Foo v5)。

Foo XML 模式相当复杂,并且存在已知的向后兼容性问题,因此 Foo v1 XML 内容可能无法通过使用 Foo v3 XML 模式的 XML 模式验证。

我想到了两种方法 1)使用JAXB等Java XML数据绑定(bind),为每个版本的XML模式生成一组绑定(bind)。以 Foo XML 模式为例,我将为 Foo XML 模式 v1 到 v5 生成 5 组绑定(bind)。挑战在于如何将 Foo XML 内容版本与另一个版本的 XML 内容合并。

2) 创建一组 Java 数据模型并使用 SAX、DOM、JDOM 手动解析它并尝试解决我可能遇到的所有向后兼容性问题。现在的挑战是我必须在没有 JAXB 帮助的情况下自己解析 XML。

我想就什么是处理不断发展的 XML 模式的最佳方法获得一些建议。 Java XML 数据绑定(bind)是正确的前进道路还是创建我自己的 Java 数据模型并手动解析它?

最佳答案

根据我的经验,最重要的是数据模型,而不是输入格式。如果您可以提供一个干净的模型并抽象出不同输入的所有麻烦,您最终会得到一个更干净、更易于管理的代码线。

鉴于单个文档的版本往往是递增的,如果您自己编写解析器,您可能会得到相当多的代码重用,或者您可以创建并行 JAXB 包来处理与另一个类配对的每种格式以进行转换该版本特定模型到您的顶级模型。

关于java - 如何在 Java 中处理不断发展的 XML 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14268633/

相关文章:

xml - 什么版本的 XPath 在 XML::LibXML 中实现?

java - Android 动态壁纸 - 动态壁纸中 XML 的层和基础知识

java - JAXB MOXy 中的静态工厂方法

java - JAXB 抑制 XSI 和 xmlns

java - 使用集合的集合生成 XML

java - Spring Data JPA - findAllBy 查询检查是否为空?

java - 是否有一个 Java HashMap 实现在初始插入后不能更改键值?

java - 使用 apache cxf 的 Spring 启动不使用 logback.xml

java - 如何将数组列表保存在 txt 中并加载其中存储的内容?

android - 从父级的样式定义中获取子级的样式属性