如何在一个Java应用程序中处理不同版本的xsd文件?
事实
在我的java应用程序中,我必须同时处理具有不同模式版本的XML文件(xsd文件)。XML文件的内容在不同版本之间只发生了一点变化,所以我想主要使用相同的代码来处理它,并且只是根据所用架构的版本进行一些大小写区分。
当前解决方案
现在,我正在使用SAX解析器解析XML文件,而我自己忽略了架构版本,只是检查我处理所需的标签是否存在。ContentHandler
可能的替代方案
我真的很想使用JAXB来生成用于解析XML文件的类。通过这种方式,我可以从Java代码中删除所有硬编码的字符串(常量),并改用生成的类进行处理。
问题
- 如何使用 JAXB 以统一的方式处理不同的模式版本?
- 有没有更好的解决方案?
进展
我将架构版本编译为不同的包 v1、v2 和 v3。现在我可以创建一个这样的方式:Unmarshaller
JAXBContext jc = JAXBContext.newInstance(
v1.Root.class, v2.Root.class, v3.Root.class );
Unmarshaller u = jc.createUnmarshaller();
现在,我提供了与 XML 文件架构匹配的包中的类。u.unmarshal( xmlInputStream );
Root
接下来,我将尝试定义一个来访问架构的公共部分。如果您以前做过这样的事情,请告诉我。与此同时,我正在阅读JAXB规范...interface