regex - 我需要删除属性标签 使用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*(?:<\/([a-z]+)>)(\s*<\1>)"
replace=""/>
</sequential>
</for>
</target>
如何遍历 xml 文件并替换所有出现的“类型”标签?
解决方案
您可以使用 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"/>
推荐阅读
- c++ - 计算清除图片所需的最少点击次数
- php - 如何在 wampserver3.1.9_x64 localhost 上禁用全局注册?
- r - 达到阈值后如何将 ggplot 列包装 n 次
- embedded - Windows 10 下的 HCS08 和 HCS12X 需要哪个 Codewarrior 版本?
- postman - 获取body的值到变量
- php - php桌面无法连接MYSQL工作台
- modelica - 如何通过modelica语言实现从一卷到上卷的回流?
- excel - Excel VBA:查找Excel表格中的最后一个空单元格,而不是范围
- c++ - 将 Coap Works 放在另一个班级
- javascript - 如何使用 jQuery 脚本交流 ReactJs?