我正在尝试从ant文件运行XSLT转换.
我正在使用带有saxon 9解析器的XSLT 2.0样式表(支持XSLT 2.0).
问题是,似乎ant始终调用XSLT 1.0解析器.
这是我的蚂蚁文件:
<xslt style="stylesheet.xslt"
basedir="core/"
extension=".xml"
destdir="core/"
classpath="D:\\DevTools\\saxon\\bin\\saxon9.jar">
</xslt>
Run Code Online (Sandbox Code Playgroud)
如果我直接调用它(没有蚂蚁),它就可以了.
任何的想法 ?
jel*_*irt 19
问题是,当Saxon被添加到类路径时,默认的JAXP机制来确定使用哪个TransformerFactory,它将使用默认的Xalan.你要么需要:
javax.xml.transform.TransformerFactory系统变量设置为net.sf.saxon.TransformerFactoryImpl,CLASSPATH系统变量,或<factory name="net.sf.saxon.TransformerFactoryImpl"/>在xslt元素内使用如果你有这个问题,请检查你是不是使用Ant 1.8.1,因为有一个错误在蚂蚁1.8.1是防止这种工作.(虽然这不是原帖中的问题,因为那是在Ant 1.8.1发布之前).
你的选择是:
CLASSPATH开始之前在to Ant中明确指定saxon9.jar ,方法是:
CLASSPATH环境变量,或-lib命令行选项antprocessor="org.apache.tools.ant.taskdefs.optional.TraXLiaison"作为xslt任务元素的属性来解决此问题.我建议使用选项1,然后选项4.
选项2将起作用,但它将责任放在运行ant的人身上,以设置他们的环境并正确运行ant.我假设你不想这样,这就是为什么你试图让任务的classpath属性xslt工作.
选项3具有限制,因为SAXON Ant需要下载和安装其JAR文件.此外,SAXON Ant不适用于SAXON 9.2或更高版本(并且自2008年6月创建以来,SAXON Ant尚未更新).
理论上,指定factory子元素会使您想要显式使用的XSLT处理器 - 防止类加载器在其搜索中更早地找到不同的XSLT处理器,并使用它而不是在CLASSPATH中进一步向下的XSLT处理器.实际上(至少在ant 1.7.0,1.7.1和1.8.0中)如果factory指定了子元素,则xslt任务会忽略该classpath属性 - 这意味着您必须使用显式指定CLASSPATH(选项2).所以它无助于解决原始问题.但是,这似乎已在Ant源代码中修复,因此可以在1.8.1之后的版本中使用.
| 归档时间: |
|
| 查看次数: |
15840 次 |
| 最近记录: |