使用Saxon ANT任务从jar引用XSLT

时间:2015-11-27 06:37:00

标签: java xml xslt ant saxon

我使用Saxon的ANT任务将XSLT应用于XML。以下是我创建的ANT目标:

<target name="applyXSLT">
    <xslt in="${srcXML}" basedir="in/xml" destdir="out/xml" style="${basedir}/src/main/templates/xslt/stylesheet.xslt">
        <factory name="net.sf.saxon.TransformerFactoryImpl"/>
        <classpath refid="master-classpath" />
        <!-- All necessary varibles have been defined before -->
    </xslt>
</target>

当XSLT放在项目内的所述文件夹中时,它可以正常工作。但是现在,我需要将XSLT打包为jar的一部分,以便能够将代码分发给第三方客户端。我认为XSLT,但现在无法引用它(即使在删除{basedir}/后)。在使用Saxon时,有没有不同的方法来引用作为jar的一部分的XSLT?

2 个答案:

答案 0 :(得分:0)

您是否尝试过网址格式

jar:///some/dir/!path/within/jar/stylesheet.xsl

Saxon认识到这一点,但我不知道Ant是否通过了它。

否则,我认为您必须首先将JAR解压缩到一个临时目录中,然后从那里运行转换。

答案 1 :(得分:0)

您可以使用嵌套的style标记而不是style属性,从而可以指定任何有效的Ant资源。要引用JAR中的文件,可以使用javaresource标签。以下示例将在master-classpath的JAR中找到XSL文件;您可以根据需要通过定义新的classpath内联来显式指定JAR文件。

<target name="applyXSLT">
    <xslt in="${srcXML}" basedir="in/xml" destdir="out/xml">
        <style>
            <javaresource name="path/within/jar/to/stylesheet.xslt">
                <classpath refid="master-classpath"/>
            </javaresource>
        </style>
        <factory name="net.sf.saxon.TransformerFactoryImpl"/>
        <classpath refid="master-classpath" />
        <!-- All necessary varibles have been defined before -->
    </xslt>
</target>

有关javaresource here的更多详细信息。