如何使用一个 xml 输出文件 saxon xslt 3.0 将 xml 文件集作为输入传递到 Ant xslt 任务中

问题描述 投票:0回答:1

我有一个 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> 

如有任何建议,我们将不胜感激。

xml ant saxon xslt-3.0 fileset
1个回答
0
投票

我不知道有什么方法可以将 Ant

fileset
直接传递到 Saxon 转换中,但是您当然可以将目录名称作为样式表参数传递,并将其用作
collection()
函数的参数。 Saxon 对集合的处理在 https://www.saxonica.com/documentation12/index.html#!sourcedocs/collections

进行了描述
© www.soinside.com 2019 - 2024. All rights reserved.