我有两个名为server和letter的nant属性,它们的值有蜇痕。目标是将第一个字符串的第一个值与第二个字符串的第一个值相关联,将第一个字符串中的第二个值与第二个字符串中的第二个值相关联。这是我尝试过的。
<property name="server" value="server1;server2"/>
<property name="letter" value="A;B/>
<foreach item="String" in="${server}" delim=";" property="server">
<foreach item="String" in="${letter}" delim=";" property="letter">
<xmlpoke file="${server}\xml.config" xpath="//@path" value="${letter}" />
</foreach>
<foreach>
上述结果基本上都是服务器1和2的字母B值。但实际上服务器1应该具有值A而服务器2具有值B.如何在Nant中处理? 提前致谢。
答案 0 :(得分:3)
添加一些属性来计算你在循环中的距离应该对此有所帮助:
<property name="server" value="server1;server2" />
<property name="letter" value="A;B" />
<!-- Start at 0 for the server loop -->
<property name="counter.server" value="0" />
<foreach item="String" in="${server}" delim=";" property="server">
<!-- reset the letter counter back to 0 for each server loop -->
<property name="counter.letter" value="0" />
<foreach item="String" in="${letter}" delim=";" property="letter">
<if test="${counter.server == counter.letter}">
<!-- perform the task if we're at the same point in both loops -->
<xmlpoke file="${server}\xml.config" xpath="//@path" value="${letter}" />
</if>
<!-- increment letter count -->
<property name="counter.letter" value="${int::parse(counter.letter)+1}" />
</foreach>
<!-- increment server count -->
<property name="counter.server" value="${int::parse(counter.server)+1}" />
<foreach>
这将处理属性没有匹配项数的情况 - 它会默默地忽略它们。