我正在使用JAXB和maven-jaxb2-plugin,我现在能够成功地将我的模式绑定到Java代码。
我还有一个.xsl文件“annotate_schemas.xsl”,用于修改添加一些附加信息的特定模式。
最后,在我想要转换的模式上,我添加了标题:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="annotate_schemas.xsl"?>
...
问题在于,虽然.xsl是正确的(如果我在浏览器中打开我的模式文件,转换完美无缺),JAXB会忽略它并绑定我的模式的未经修改的版本。
我的问题是:JAXB(和/或其插件)是否有XSLT处理器?有没有办法告诉JAXB绑定XSLT转换的结果而不是原始的?
非常感谢
答案 0 :(得分:2)
与绝大多数消耗XML的应用程序一样,JAXB不会注意到<?xml-stylesheet?>
处理指令。如果要在将文档传递给JAXB之前转换文档,则需要显式转换它,例如使用JAXP转换API。 (JAXP中有一个选项可以根据xml-stylesheet PI的值请求转换,如果你想控制它的话:TransformerFactory.useAssociatedStylesheet())。
答案 1 :(得分:0)
您可以尝试这样的事情:
TransformerFactory transFact = TransformerFactory.newInstance();
Templates displayTemplate = transFact.newTemplates(new StreamSource(new File("your_xsl_file")));
TransformerHandler handler =
((SAXTransformerFactory) transFact).newTransformerHandler(displayTemplate);