带有saxon9的Ant XSLT 2.0加载样式表非常慢

时间:2011-04-01 16:47:53

标签: ant saxon xslt

我刚刚通过ant使用xslt2.0。我有一个看起来像这样的构建文件:

<project name="TranformXml" default="TransformFile">
    <target name="TransformFile">
        <xslt in="input.xml"
            out="student.html"
            style="transform.xsl"
            processor="trax" classpath="./lib/saxon/saxon9he.jar">

            <factory name="net.sf.saxon.TransformerFactoryImpl"/>

        </xslt>  
    </target>
</project>

输入文档input.xml:

<student_list>
    <student>
        <name>George Washington</name>
        <major>Politics</major>
        <phone>312-123-4567</phone>
        <email>gw@example.edu</email>
    </student>

</student_list>

和stylesheet,transform.xsl

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="html"/>

    <xsl:template match="/">
    <html>
        <head>
            <title>Student Directory</title>
        </head>
        <body>
        <xsl:apply-templates />
        </body>

    </html>
    </xsl:template>


</xsl:stylesheet>

并从我的ant build输出:

ant -f build.xml 
Buildfile: /home/casey/Development/ant-tests/xslt-transform/build.xml

TransformFile:
     [xslt] Processing /home/casey/Development/ant-tests/xslt-transform/input.xml to /home/casey/Development/ant-tests/xslt-transform/student.html
     [xslt] Loading stylesheet /home/casey/Development/ant-tests/xslt-transform/transform.xsl

BUILD SUCCESSFUL
Total time: 9 seconds

我发现很难相信它应该花费9秒来完成所有这些。在生产中,样式表将变得更复杂,输入更大。实际上,我希望将整个变换过程保持不到几秒钟。

有什么想法吗?

谢谢,

凯西

2 个答案:

答案 0 :(得分:2)

你是这样做的:How to execute XSLT 2.0 with ant?

问题似乎是类路径加载。我在JDB下运行了ant,它花了所有额外的时间在org.apache.tools.ant.AntClassLoader.loadClass中读取zip文件。

我在运行ant之前尝试了这个,它的速度要快得多:

  

ant -lib /path/to/saxon/saxon9.jar

答案 1 :(得分:1)

我发现的是杀死我的表现,是通过网络加载DTD定义。

我创建了一个空的.dtd文件,并使用ant xmlcatalog将DTD公共ID引用到它,就像这样(在我的&lt; xslt /&gt;任务中):

<xmlcatalog>
  <dtd publicid="-//W3C//DTD XHTML 1.0 Transitional//EN" location="empty.dtd"/>
<xmlcatalog>

这需要将构建时间从22分钟(许多文档)降低到3秒!