<target name="openAssetXMLFile">
<for list="${LogOfCurrentAssetChanges}" delimiter="${line.separator}" param="paths">
<sequential>
<xmltask source="${basedir}@{paths}">
<copy path="/x/id/text()" attrValue="true" property="type"/>
<copy path="/x/attribute[9]/data/stringValue/text()" attrValue="true" property="uid"/>
</xmltask>
<echo> ${type}</echo>
<echo> ${basedir}@{paths}</echo>
<echo> ${uid}</echo>
</sequential>
</for>
</target>
我在这里很无助,希望得到任何帮助。所以我有上面的buildfile片段使用了顺序,它使用了宏定义,因此字符串应该用@符号引用而不是通常的$符号。
我有一个logofcurrentassetchanges文件,其中包含对某些xml文件的相对引用。现在我需要将它与当前目录连接起来以生成绝对引用名称。当我回显串联字符串时它是完美的 - 我的意思是每个for循环迭代它按预期打印一个不同的xml字符串。但是当我在xmltask中使用它时,如上所示,它使用所有迭代的第一个源?我是否需要刷新/清理或执行某些操作以将xmltask源属性从其原始旧值中清除?或者我有什么办法可以解决这个问题。 echo语句的输出示例:
[echo] CSElement:1242615155986
[echo] /y/z/t/u/11/67/MFootsfgsgfser(e7e105ef-660f-4363-8018-638f87ba06be).main.xml
[echo] 7d454a57-fe1a-48c1-994c-bbcbbf9f78e4
[echo] CSElement:1242615155986
[echo] /a/b/c/MORegistsfgsfgfsgerLogsfgshinLinsgsfgks.jsp.main.xml
[echo] 7d454a57-fe1a-48c1-994c-bbcbbf9f78e4
此处类型和uid不断重复,但路径在打印时看起来正确。
答案 0 :(得分:1)
(至少部分)问题是xmltask
副本分配给Ant属性(名为type
和uid
)。 Ant属性 - 与ant-contrib @
变量不同,通常是不可变的,因此一旦为它们设置了值,它们就不会改变。这就是你所看到的。
有一个任务 - 从Ant版本1.8开始 - 称为local
,可用于将属性范围限定为当前的“块”,以便您可以在每个for
中使用不同的值迭代。它看起来像这样:
<sequential>
<local name="type" />
<local name="uid" />
<xmltask source="${basedir}@{paths}">
... etc.