如何在ant脚本中连接xml文件时避免使用xml头

时间:2016-02-29 19:02:23

标签: java xml ant xml-parsing

我将文件夹中的所有xml文件连接到ant脚本中的单个xml文件中。连接xml文件时,标题

 <?xml version="1.0" encoding="UTF-8" ?> 
所有xml文件中的

都会附加在输出xmlfile中。

有没有办法避免这个标题?

  <concat destfile="${docbook.dir}/all-sections.xml"
      force="no">       
   <fileset dir="${docbook.dir}"
     includes="sections/*.xml"/>
   </concat>

2 个答案:

答案 0 :(得分:1)

您可以应用正则表达式来丢弃标题:

<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>

https://ant.apache.org/manual/Types/filterchain.html

编辑:如果你想保留第一次出现的标题,那么这是一个选项:

<property name="first" value="true"/>

<concat destfile="${docbook.dir}/all-sections.xml">       
    <fileset dir="${docbook.dir}" includes="sections/*.xml"/>
    <filterchain>
        <scriptfilter language="javascript">
        <![CDATA[
            first = project.getProperty("first");
            if(self.getToken().indexOf("<\?xml version") != -1) {
                if(first == "true") {
                    project.setProperty("first", "false");
                } else {
                    self.setToken(null);
                }
            }
        ]]> 
        </scriptfilter>             
    </filterchain>
</concat>

答案 1 :(得分:0)

有一个过滤器链。所以你可以使用'xml version'或'encoding'来过滤。

<filterchain>
         <linecontains>
          <contains value="xml version"/>
         </linecontains>
      </filterchain>

然后有一个Header可以添加为common.There你可以给出公共标题。

<header filtering="no" trimleading="yes">
      ----Put  Header---
</header>

功能参考:https://googleweblight.com/?lite_url=https://ant.apache.org/manual/Tasks/concat.html&ei=t1jfBWPU&lc=en-IN&s=1&m=717&host=www.google.co.in&ts=1456774849&sig=ALL1Aj6a3WOuua261FfWU1a1B-ULkTgOMw