java - 我可以将当​​前的 JAXB 模型转换为其他 JAXB 模型吗?

标签 java xml xsd jaxb xjc

我有两个 XML 文件 file1.xmlfile2.xml。我也有每个文件的架构,file1.xsdfile2.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 文档的标准。通过使用 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 (MOXy) 的外部映射文件

我是 MOXy 的负责人,我们提供了一个外部映射文件,允许您将一个对象模型映射到多个 XML 表示。有关示例,请参见下面的链接:

关于java - 我可以将当​​前的 JAXB 模型转换为其他 JAXB 模型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13289136/

相关文章:

JAVA EclipseLink 可选查询参数

java - 使用java将xml转换为xsd

java - 为什么我不能在 Java 方法中使用 XPath 获取标记的内容?

c# - 异常阻止检测多个 XML 验证错误

java - 多个 Hibernate 配置

java - ZonedDateTime 忽略 ss 部分的 00

java - 寻找一个Android XML教程

python - 在 Python 中使用 PMML 和 Augustus 对回归模型进行评分

java - 如何使用资源 jar 中分解出的 .xsd 文件来指定 JAXB 架构?

在循环内定义的Java变量在循环外似乎无法被识别?