我有一个 XML 文件的文件夹。我想将每个文件中的一些行复制到一个 XML 文件中,然后将其用作查找。我有一个 xslt 文件和一个 ANT 构建文件,但我确信必须有一个简单的方法来做到这一点。
输入文件如下所示:
<engine_config>
<eng_family>RK2-1020</eng_family>
<eng_model>RK2-1020</eng_model>
<cd_gek>gek1000</cd_gek>
<version_no>1000</version_no>
<version_name>all</version_name>
<display_name>RK2 1000</display_name>
...lots of other info I don't need
</engine_config>
想要的结果:
<gek-lookup>
<engine_config>
<eng_family>RK2-1020</eng_family>
<eng_model>RK2-1020</eng_model>
<display_name>RK2 1000</display_name>
<cd_gek>gek1000</cd_gek>
</engine_config>
<engine_config>
<eng_family>RK2-1021</eng_family>
<display_name>RK2 1001</display_name>
<cd_gek>gek1001</cd_gek>
</engine_config>
etc...
</gek-lookup>
XSLT:
<xsl:template match="/">
<gek-lookup>
<xsl:apply-templates />
</gek-lookup>
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="engine_model | eng_family"/>
<xsl:copy-of select="display_name"/>
<xsl:copy-of select="cd_gek"/>
</xsl:copy>
</xsl:template>
此任务为每个输入文件创建一个 XML 输出文件,但我希望将所有结果写入一个输出文件:
<target name="GenerateFileIndex">
<xslt
basedir="configuration-files"
destdir="configuration-files\working"
classpath="${saxon.jar}"
includes="*.xml,*.XML"
excludes="configurations*"
style="build_lookup_file.xsl"
extension=".xml"
out="configuration-files\working\configurations.xml"
force="true">
<factory name="net.sf.saxon.TransformerFactoryImpl"/>
</xslt>
</target>
我创建了这个
fileset
,但当只有一个输出文件时,我不知道如何在 fileset
任务中正确使用 xslt
。
<fileset id="xmlfileset" dir="${config.dir}" casesensitive="no">
<include name="*.XML" />
<exclude name="configurations.xml"/>
</fileset>
这几乎可以工作,但是速度非常慢,并且会覆盖输出文件中的前一个条目:
<target name="GenerateFileIndex">
<mkdir dir="${output.dir}"/>
<apply executable="java" failonerror="true">
<arg value="-cp"/>
<arg value="${saxon.jar}"/>
<arg value="net.sf.saxon.Transform"/>
<srcfile/>
<fileset refid="xmlfileset"/>
<arg value="-xsl:${xslt}"/>
<arg value="-o:${output.dir}${file.separator}${gek.index}"/>
</apply>
</target>
如有任何建议,我们将不胜感激。
我不知道有什么方法可以将 Ant
fileset
直接传递到 Saxon 转换中,但是您当然可以将目录名称作为样式表参数传递,并将其用作 collection()
函数的参数。 Saxon 对集合的处理在 https://www.saxonica.com/documentation12/index.html#!sourcedocs/collections 进行了描述