Java 我可以将当前JAXB模型转换为其他JAXB模型吗?
我有两个XML文件file1.XML和file2.XML。对于这些文件中的每一个,我都有各自的模式:file1.xsd和file2.xsd 我使用xjc基于file1.xsd创建java类,称为model1,并基于file2.xsd创建类,称为model2 我使用model1将file1.xml与JAXB库解组。我想将此数据从model1转换为model2,然后将转换后的数据封送到file2.xmlJava 我可以将当前JAXB模型转换为其他JAXB模型吗?,java,xml,xsd,jaxb,xjc,Java,Xml,Xsd,Jaxb,Xjc,我有两个XML文件file1.XML和file2.XML。对于这些文件中的每一个,我都有各自的模式:file1.xsd和file2.xsd 我使用xjc基于file1.xsd创建java类,称为model1,并基于file2.xsd创建类,称为model2 我使用model1将file1.xml与JAXB库解组。我想将此数据从model1转换为model2,然后将转换后的数据封送到file2.xml 是否可以将数据从模型1转换为模型2?我可以合并对象工厂吗?我该怎么做?我不确定我是否理解这个问题
是否可以将数据从模型1转换为模型2?我可以合并对象工厂吗?我该怎么做?我不确定我是否理解这个问题-我认为您需要在Model2类上添加一个构造函数,该构造函数接受Model1类作为参数 例如,假设这是您的Model1类:
class Model1{
String firstname;
String surname;
}
class Model2{
String fullName
public Model2(Model1 m){
this.fullname=m.firstname+" "+m.surname;
}
}
在该构造函数中,将属性值从m复制到Model2实例
之后,您可以在Model1和Model2之间进行转换:
Model1 m1=unmarshall("file1.xml");
Model2 m2=new Model2(m1);
m2.marshall("file2.xml");
如果您只是在xml格式之间进行转换,我建议您改用。我不确定是否理解这个问题-我想您需要的是在Model2类上添加一个构造函数,该构造函数接受Model1类作为参数 例如,假设这是您的Model1类:
class Model1{
String firstname;
String surname;
}
class Model2{
String fullName
public Model2(Model1 m){
this.fullname=m.firstname+" "+m.surname;
}
}
在该构造函数中,将属性值从m复制到Model2实例
之后,您可以在Model1和Model2之间进行转换:
Model1 m1=unmarshall("file1.xml");
Model2 m2=new Model2(m1);
m2.marshall("file2.xml");
如果您只是在xml格式之间进行转换,我建议您改用。鉴于您的用例,没有一种方法可以自动将从一个xml模式生成的模型转换为从另一个xml模式生成的另一个JAXB模型。有几种选择: 选项1-对象到对象的转换 您可以通过编程在对象模型之间移动数据。还有一些映射库可以使这个过程更容易 选项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表示。有关示例,请参见下面的链接:
给定您的用例,没有一种方法可以自动将从一个XML模式生成的模型转换为从另一个XML模式生成的另一个JAXB模型。有几种选择: 选项1-对象到对象的转换 您可以通过编程在对象模型之间移动数据。还有一些映射库可以使这个过程更容易 选项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表示。有关示例,请参见下面的链接: