【问题标题】:JAXB and XSLT processorJAXB 和 XSLT 处理器
【发布时间】:2012-07-24 14:30:59
【问题描述】:

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

非常感谢

【问题讨论】:

  • 我知道我可以修改架构,将其保存到一个新文件中,然后在该文件上运行 JAXB ......但我很好奇是否可以使用更简洁的方法。

标签: java xml xslt jaxb


【解决方案1】:

与绝大多数使用 XML 的应用程序一样,JAXB 不会注意到 &lt;?xml-stylesheet?&gt; 处理指令。如果要在将文档传递给 JAXB 之前对其进行转换,则需要显式地转换它,例如使用 JAXP 转换 API。 (JAXP 中有一个选项可以根据 xml-stylesheet PI 的值请求转换,如果您希望这样控制它:TransformerFactory.useAssociatedStylesheet())。

【讨论】:

    【解决方案2】:

    你可以试试这样的:

    TransformerFactory transFact = TransformerFactory.newInstance();
    Templates displayTemplate = transFact.newTemplates(new StreamSource(new File("your_xsl_file")));
    
    TransformerHandler handler = 
      ((SAXTransformerFactory) transFact).newTransformerHandler(displayTemplate);
    

    【讨论】:

    • 但这不能在绑定时完成。我需要一些可以在 maven-jaxb2-plugin 开始运行之前进行转换的东西......或者理想情况下,插件本身可以即时执行转换......
    猜你喜欢
    • 1970-01-01
    • 2011-10-09
    • 2015-06-14
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    相关资源
    最近更新 更多