我刚刚通过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秒来完成所有这些。在生产中,样式表将变得更复杂,输入更大。实际上,我希望将整个变换过程保持不到几秒钟。
有什么想法吗?
谢谢,
凯西
答案 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秒!