JAXB和XSLT处理器

时间:2012-07-24 14:31:00

标签: java xml xslt jaxb

我正在使用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转换的结果而不是原始的?

非常感谢

2 个答案:

答案 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);