【问题标题】:MacroDef, properties and xmltaskMacroDef、属性和 xmltask
【发布时间】:2013-01-07 18:44:28
【问题描述】:
 <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 sn-p 它使用顺序,它使用宏定义,所以字符串应该用 @ 符号而不是通常的 $ 符号来引用。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多