我有一个如下所示的 xml:
<data>
<foo>value1</foo>
<foo>value2</foo>
<foo>value3</foo>
</data>
我想创建实现以下功能的宏定义:
<?xml version="1.0"?>
<project name="OATS" default="execute" basedir=".">
<xmlproperty file="data.xml" collapseAttributes="true"/>
<target name="execute">
<foreach list="${data.foo}" target="runScript" param="script"/>
</target>
<target name="runScript">
<echo>Doing things with ${script}</echo>
</target>
</project>
有人知道怎么做吗?提前致谢。
最佳答案
xmltask是 Ant 社区中为此目的的最佳选择,您不必定义自己的 macrodef。
例如:
<tools:xmltask source="data.xml" report="false" >
<tools:call path="data/foo">
<param name="value" path="text()"/>
<actions>
<echo>Doing things with @{value}</echo>
</actions>
</tools:call>
</tools:xmltask>
我鼓励你阅读用户手册,因为 xmltask 有很多选项。它基本上支持 XPath 来提取和迭代 xml 的任何部分。除了匿名代码块之外,它还支持对现有目标的调用(如示例中所示)。
这很难被击败。
关于ant - 如何在 <macrodef> 中进行 <foreach>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14457360/