我正在通过 Ant 的 XSLT 任务运行一些 XSL 转换。我使用 Saxon 9HE 作为处理引擎。我有一种情况,输入 XML 文件都使用相同的 DTD,但声明它位于不同的位置。有些声明它在当前目录中,有些在文件夹中,有些则引用 URL。这是蚂蚁脚本:
<?xml version="1.0" encoding="UTF-8"?>
<project name="PubXML2EHeader" default="transform">
<property name="data.dir.input" value="./InputXML"/>
<property name="data.dir.output" value="./converted-xml"/>
<property name="xslt.processor.location" value="D:\\saxon9he.jar"/>
<property name="xslt.processor.factory" value="net.sf.saxon.TransformerFactoryImpl"/>
<path id="saxon9.classpath" location="${xslt.processor.location}"/>
<target name="clean">
<delete dir="${data.dir.output}" includes="*.xml" failonerror="no"/>
</target>
<target name="transform" depends="clean">
<xslt destdir="${data.dir.output}"
extension=".xml"
failOnTransformationError="false"
processor="trax"
style="Transform.xsl"
useImplicitFileset="false"
classpathref="saxon9.classpath"
>
<outputproperty name="method" value="xml"/>
<outputproperty name="indent" value="yes"/>
<fileset dir="${data.dir.input}" includes="**/*.xml" excludes="Transform.xml"/>
<factory name="${xslt.processor.factory}"/>
</xslt>
</target>
</project>
当我运行这个 Ant 脚本时,我得到如下错误:
[xslt]:致命错误!XML 解析器处理文件报告的 I/O 错误:/D:/annurev.biophys.093008.131228.xml: http: //www.atypon.com/DTD/nlm-dtd/archivearticle.dtd原因:java.io.FileNotFoundException: http://www.atypon.com/DTD/nlm-dtd/archivearticle.dtd
我认为这是因为撒克逊人无法访问 DTD(在这种情况下实际上是防火墙问题)。我不认为我关心验证输入,这就是我认为这里发生的事情,我想跳过它。是否可以向 XSLT Ant 任务添加一个属性来阻止 Saxon 尝试读取 DTD?