2

我最近一直在通过 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>

和样式表,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 构建的输出:

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 秒。在生产中,样式表会更加复杂,输入也会更大。实际上,我希望将整个转换过程保持在几秒钟之内。

有任何想法吗?

谢谢,

凯西

4

1 回答 1

1

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

我创建了一个空的 .dtd 文件,并使用 ant xmlcatalog 将 DTD 公共 ID 引用给它,如下所示(在我的 <xslt/> 任务中):

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

这将构建时间从 22 分钟(许多文档)缩短到 3 秒!

于 2013-08-04T08:29:04.833 回答