如何在一个Java应用程序中处理不同版本的xsd文件?

在我的java应用程序中,我必须同时处理具有不同模式版本(xsd文件)的XML文件。 XML文件的内容在不同版本之间只有一点点变化,所以我想主要使用相同的代码来处理它,并且只是根据所使用的模式的版本做一些案例distictions。

In my java application I have to handle XML files with different schema versions (xsd files) simultaneously. The content of the XML files changed only a little between the different versions, so I'd like to use mainly the same code to handle it and just do some case distictions dependent on the version of the used schema.

现在我正在使用SAX解析器和我自己的 ContentHandler 忽略架构版本,只检查我需要处理的标签是否存在。

Right now I'm parsing the XML files with a SAX parser and my own ContentHandler ignoring the schema version and just checking if the tags I need for processing are present.

我真的很想使用JAXB来生成解析XML文件的类。这样我就可以从我的java代码中删除所有硬编码字符串(常量),并使用生成的类来处理。

I'd really like to use JAXB to generate the classes for parsing the XML files. This way I could remove all the hardcoded strings (constants) from my java code and handle with the generated classes instead.


  • 如何使用JAXB以统一的方式处理不同的模式版本?

  • 有更好的解决方案吗?

我将架构版本编译为不同的包v1,v2和v3。现在我可以用这种方式创建一个 Unmarshaller

I compiled the schema versions to different packages v1, v2 and v3. Now I can create an Unmarshaller this way:

JAXBContext jc = JAXBContext.newInstance( 
    v1.Root.class, v2.Root.class, v3.Root.class );
Unmarshaller u = jc.createUnmarshaller();

现在 u.unmarshal(xmlInputStream); 从匹配XML文件架构的包中给我 Root 类。

Now u.unmarshal( xmlInputStream ); gives me the Root class from the package matching the schema of the XML file.

接下来我会尝试定义接口以访问模式的公共部分。 如果您以前做过类似的事情,请告诉我。与此同时,我正在阅读JAXB规范...

Next I'll try to define an interface to access the common parts of the schemas. If you have done something like this before, please let me know. In the mean time I'm reading through the JAXB specs...



 1 条回答