首页 > 解决方案 > 我需要删除属性标签 使用ant脚本在xml文件中没有任何值

问题描述

我需要使用 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 脚本来执行这项工作,但是,它只修剪了一次出现的“类型”标签。

<!--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 文件并替换所有出现的“类型”标签?

标签: regexxmlparsingantxml-parsing

解决方案


您可以使用 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"/>

推荐阅读