Java 使用XSLT模板从一个JAXB对象转换到另一个JAXB对象
是否有一种方法可以使用XSLT模板文件将JAXB生成的对象转换为另一个JAXB对象。这两个对象由两个不同的JAXB绑定生成 我知道我可以将对象编组为字符串,然后使用XSLT处理器将其转换为其他格式。然后将其解组到另一个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转换为
问题是这在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());