<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>
我在这里相当无助,希望得到任何帮助。所以我有上面的构建文件片段,它使用顺序,它使用宏定义,所以字符串应该用@符号而不是通常的$符号来引用。我有一个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不断重复,但是打印出来的路径看起来是正确的。
(至少部分)问题是xmltask
副本分配给Ant属性(命名为type
和uid
)。Ant属性—与Ant -contrib @
变量不同,它们通常是不可变的,因此一旦为它们设置了一个值,它们就不会改变。这就是你所看到的。
在Ant 1.8版本中,有一个叫做local
的任务,它可以用来将一个属性作用于当前的"块",这样你就可以在每次for
迭代中有一个不同的值。它看起来像这样:
<sequential>
<local name="type" />
<local name="uid" />
<xmltask source="${basedir}@{paths}">
... etc.