MacroDef,属性和xmltask

时间:2013-01-07 18:44:28

标签: xml ant xml-parsing xml-serialization xmltask

 <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不断重复,但路径在打印时看起来正确。

1 个答案:

答案 0 :(得分:1)

(至少部分)问题是xmltask副本分配给Ant属性(名为typeuid)。 Ant属性 - 与ant-contrib @变量不同,通常是不可变的,因此一旦为它们设置了值,它们就不会改变。这就是你所看到的。

有一个任务 - 从Ant版本1.8开始 - 称为local,可用于将属性范围限定为当前的“块”,以便您可以在每个for中使用不同的值迭代。它看起来像这样:

<sequential>
   <local name="type" />
   <local name="uid" />
   <xmltask source="${basedir}@{paths}">
   ... etc.