在ant脚本中连接xml文件

时间:2016-02-29 09:29:54

标签: xml ant xml-parsing xslt-2.0

我是蚂蚁剧本的新手。我正在寻找如何将文件夹中的所有xml文件连接到ant脚本中的单个xml文件中。

在我的项目中,将在一个文件夹中动态生成许多xml文件,例如:server1.xml,manager.xml,server2.xml,server3.xml。我需要将其文件名中包含服务器的所有xml文件(server1.xml,server2.xml,server3.xml)合并到一个xml中,例如:server.xml。并需要在jboss中部署它。

我发现使用xmltask将内容从一个xml文件复制到另一个文件。 我不知道如何将文件夹中的所有xml文件内容复制到ant脚本中的单个xml文件中。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

试试这个

连接一系列文件,只有在比所有源文件更旧的情况下才更新目标文件:

示例代码:

 <concat destfile="${docbook.dir}/all-sections.xml"
          force="no">
    <filelist dir="${docbook.dir}/sections"
         files="introduction.xml,overview.xml"/>
    <fileset dir="${docbook.dir}"
         includes="sections/*.xml"
         excludes="introduction.xml,overview.xml"/>
  </concat>

避免根标记:

<concat destfile="${docbook.dir}/all-sections.xml" force="no">       
    <fileset dir="${docbook.dir}" includes="sections/*.xml"/>
    <filterchain>
        <linecontainsregexp negate="true">
            <regexp pattern="&lt;\?xml version"/>
        </linecontainsregexp>
    </filterchain>  
 </concat>

答案 1 :(得分:1)

好吧,假设使用的XSLT 2.0处理器是Saxon 9,那么你可以按照这样的方式进行。

<xsl:param name="folder-uri" select="'file:/root/users/foo/foldername'"/>
<xsl:param name="select-pattern" select="'server*.xml'"/>
<xsl:variable name="docs" select="collection(concat($folder-uri, '?select=', $selectPattern))"/>

<xsl:template name="main" match="/">
  <xsl:element name="{name($docs[1]/*)}" namespace="{namespace-uri($docs[1]/*)}">
    <xsl:copy-of select="$docs/*/node()"/>
  </xsl:element>
</xsl:template>