Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用XSLT模板从一个JAXB对象转换到另一个JAXB对象_Java_Xml_Xslt_Jaxb - Fatal编程技术网

Java 使用XSLT模板从一个JAXB对象转换到另一个JAXB对象

Java 使用XSLT模板从一个JAXB对象转换到另一个JAXB对象,java,xml,xslt,jaxb,Java,Xml,Xslt,Jaxb,是否有一种方法可以使用XSLT模板文件将JAXB生成的对象转换为另一个JAXB对象。这两个对象由两个不同的JAXB绑定生成 我知道我可以将对象编组为字符串,然后使用XSLT处理器将其转换为其他格式。然后将其解组到另一个JAXB对象 问题是这在JAXB中是否可行。不,这是不可能的。JAXB将Java转换为XML或XML转换为Java。如果有XML,则使用XSLT转换文档。如果您有一个Java对象,那么使用Java来转换一个对象。没有中间格式。不,不可能。JAXB将Java转换为XML或XML转换为

是否有一种方法可以使用XSLT模板文件将JAXB生成的对象转换为另一个JAXB对象。这两个对象由两个不同的JAXB绑定生成

我知道我可以将对象编组为字符串,然后使用XSLT处理器将其转换为其他格式。然后将其解组到另一个JAXB对象


问题是这在JAXB中是否可行。

不,这是不可能的。JAXB将Java转换为XML或XML转换为Java。如果有XML,则使用XSLT转换文档。如果您有一个Java对象,那么使用Java来转换一个对象。没有中间格式。

不,不可能。JAXB将Java转换为XML或XML转换为Java。如果有XML,则使用XSLT转换文档。如果您有一个Java对象,那么使用Java来转换一个对象。没有中间格式。

我认为没有任何中间序列化或dom树构造是不可能的,但是序列化为字符串将是最糟糕的选择。最好的选择可能是封送到执行xsl转换并构建dom树的。然后可以再次取消对该树的编组。下面是一些未经测试的示例代码,展示了这是如何工作的:

Source xsl = ...
SAXTransformerFactory factory = (SAXTransformerFactory) TransformerFactory.newInstance();
TransformerHandler handler = factory.newTransformerHandler(xsl);

DOMResult result = new DOMResult();

handler.setResult(result);

marshaller.marshal(inputObject, handler);

transformedObject = unmarshaller.unmarshal(result.getNode());

我认为没有任何中间序列化或dom树构造是不可能的,但是序列化为字符串将是最糟糕的选择。最好的选择可能是封送到执行xsl转换并构建dom树的。然后可以再次取消对该树的编组。下面是一些未经测试的示例代码,展示了这是如何工作的:

Source xsl = ...
SAXTransformerFactory factory = (SAXTransformerFactory) TransformerFactory.newInstance();
TransformerHandler handler = factory.newTransformerHandler(xsl);

DOMResult result = new DOMResult();

handler.setResult(result);

marshaller.marshal(inputObject, handler);

transformedObject = unmarshaller.unmarshal(result.getNode());