2012-11-08 42 views
1

我有两个XML文件file1.xmlfile2.xml。我也有这些文件中的每一个的架构,分别为file1.xsdfile2.xsd我可以将当​​前JAXB模型转换为其他JAXB模型吗?

我使用xjc创建基于file1.xsd(称为模型(1))的Java类,和创建一个基于file2.xsd(称为模型(2))类。

我使用模型(1)将0123.库的file1.xml解组。我想这个数据从模型(1)转换为模型(2),然后将转换后的数据元帅file2.xml

是否有可能将数据从转换模型(1)模型(2)?我可以合并ObjectFactories吗?我将如何做到这一点?

回答

5

考虑到您的用例,没有办法将从一个XML模式生成的JAXB (JSR-222)模型自动转换为另一个XML模式生成的另一个JAXB模型。有几个选项:

选项1 - 对象到对象的转换

你可以通过程序移动对象模型之间的数据。还有映射库可以使这个过程更容易(http://dozer.sourceforge.net/)。

选项#2 - XSLT

XSLT是一个XML文档转换为另一种基于一组规则的标准。通过使用JAXBSourceJAXBResult,您甚至可以在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(莫西)的外部映射文件

我是莫西铅和我们提供了一个外部映射文件,允许你映射一个对象模型的多个XML表示。见下面的链接中的示例:

2

我不太确定我是否理解这个问题 - 我想你需要的是在Model2类中添加一个接受Model1类作为参数的构造函数。

举个例子,让我们说这是你的型号1类:

class Model1{ 
    String firstname; 
    String surname; 

} 

class Model2{ 
    String fullName 
    public Model2(Model1 m){ 
     this.fullname=m.firstname+" "+m.surname; 
    } 
} 

即构造函数中,从m个拷贝属性的值到Model2的实例

之后,你可以相互转换型号1和模型2:

Model1 m1=unmarshall("file1.xml"); 
Model2 m2=new Model2(m1); 
m2.marshall("file2.xml"); 

如果你正在经历这一切的努力只为XML格式之间进行转换,我会建议你使用XSLT插件TEAD。

+0

1为XSLT建议 –

相关问题