我有两个 XML 文件 file1.xml
和 file2.xml
。我也有每个文件的架构,file1.xsd
和 file2.xsd
。
我使用 xjc
创建基于 file1.xsd
的 java 类(称为 model(1)),并基于 file2.xsd< 创建类
(称为模型(2))。
我使用 model(1) 通过 JAXB
库解码 file1.xml。我想将此数据从模型(1)转换为模型(2),然后将转换后的数据编码为 file2.xml
是否可以将数据从 model(1) 转换为 model(2)?我可以合并 ObjectFactories
吗?我该怎么做?
最佳答案
鉴于您的用例,没有办法自动从 JAXB (JSR-222) 转换从一个 XML 模式生成的模型转换为从另一个 XML 模式生成的另一个 JAXB 模型。有几个选项:
选项 #1 - 对象到对象的转换
您可以通过编程方式在对象模型之间移动数据。还有一些映射库可以使这个过程更容易 ( http://dozer.sourceforge.net/ )。
选项 #2 - XSLT
XSLT 是根据一组规则将一个 XML 文档转换为另一个 XML 文档的标准。通过使用 JAXBSource
和 JAXBResult
,您甚至可以在 Java 模型上使用 XSLT。
TransformerFactory tf = TransformerFactory.newInstance();
StreamSource xslt = new StreamSource(new FileInputStream("my-xslt.xml"));
Transformer t = tf.newTransformer(xslt);
JAXBContext jc = JAXBContext.newInstance(MyClass.class);
JAXBSource source = new JAXBSource(jaxbContext1, foo);
JAXBResult result = new JAXBResult(jaxbContext2);
t.transform(source, result);
Bar bar = (Bar) result.getResult();
选项 #3 - EclipseLink JAXB (MOXy) 的外部映射文件
我是 MOXy 的负责人,我们提供了一个外部映射文件,允许您将一个对象模型映射到多个 XML 表示。有关示例,请参见下面的链接:
关于java - 我可以将当前的 JAXB 模型转换为其他 JAXB 模型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13289136/