我需要使用ant脚本删除xml文件中没有任何值的属性标签<types> </types>

时间:2018-08-19 11:43:58

标签: regex xml parsing ant xml-parsing

我需要使用ant脚本删除xml文件中没有任何值的属性标签

下面是我拥有的XML:

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>DoNothingTest</members>            
            <name>ApexClass</name>
    </types>
    <types>
    </types>
    <types>
    </types>
    <types>
    </types>
    <types>
    </types>
<version>42.0</version>
</Package>

所有没有嵌套标签或值的标签都应从此xml中删除。输出应如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
    <types>
        <members>DoNothingTest</members>            
            <name>ApexClass</name>
    </types>
    <version>42.0</version>
</Package>

如何使用ANT脚本实现这一目标?

我正在使用下面的ant脚本执行该工作,但是,它仅会修剪一次'types'标签的出现。

<!--Format the generated XML file -->   
<target name="formatXML" depends="generatePackage.xml">
<property name="final-xml.file" value="temp/src/package.xml"/>

<for param="src-xml.absolute-path" list="${final-xml.file}">
        <fileset dir="temp/src/" includes="*.xml"/>
        <sequential>         

<replaceregexp file="${final-xml.file}"
    flags="s"
    match="\s*(?:&lt;\/([a-z]+)>)(\s*&lt;\1>)"
    replace=""/>
        </sequential>
    </for>  
</target>

如何遍历xml文件并替换所有出现的'types'标签?

1 个答案:

答案 0 :(得分:0)

您可以使用XSLT ant任务从Ant调用XSLT转换。删除命名空间<types>中的空http://soap.sforce.com/2006/04/metadata元素的样式表由样板标识规则组成,该规则复制所有未更改的元素,再加上规则

<xsl:template match="x:types[not(*) and not(text()[normalize-space()])]"
     xmlns:x="http://soap.sforce.com/2006/04/metadata"/>