如何从XML属性文件加载变量?

时间:2012-09-13 23:40:07

标签: java xml ant ant-contrib

我目前正在从Ant中的XML文件加载属性。但是,我想在for循环中执行当前的ant任务,同时每次为同一组属性加载新的XML属性文件。

我知道ant-contrib的var任务的存在,它允许我覆盖属性。但是,我不确定如何将其与XML文件中的加载属性相结合。我首先考虑迭代所有属性,然后使用propertyregex任务将它们设置为新值。不幸的是,当我开始编写代码时,我意识到我还不知道如何实际加载属性值,因为它们无法覆盖以前设置的属性。 (好吧,他们可以使用var任务,但据我所知,这不能用于从XML文件加载。)

有什么想法吗?我理想地寻找的是一个叫做

的任务
<xmlvars file="myxmlpropertyfile.xml"/>

就像

一样起作用
<xmlproperty file="myxmlpropertyfile.xml"/>

,但它会覆盖变量。

2 个答案:

答案 0 :(得分:2)

您可以对<xmlproperty>任务执行的操作之一是为每个属性添加特定值。为什么不简单地使用参数名称作为前缀?

否则,您可以使用<echoproperties>任务取消设置所有属性,然后循环执行<for>任务的下一次迭代。

这样的东西,但是没有经过测试:

 <for param="my.directory">
     <fileset dir="${some.directory}"/>
     <sequential>
         <xmlproperty file="@{my.directory}/myxmlpropertyfile.xml"
            prefix="foo-fighters"/>
          <blah, blah, blah/>
          <for param="reset.var">
              <echoproperty prefix=foo-fighters"/>
              <sequential>
                  <var name="@{reset.var}"
                     unset="true"/>
              </sequential>
          </for>
     </sequential>
 </for>

基本上,您使用外部<for>循环遍历您的目录,并使用<xmlproperty>来设置属性名称。 <blah blah blah/>意味着做你想做的事。然后,在进入外部<for>循环的下一次迭代之前,执行内部 <for>循环,该循环将取消设置先前在{{1}中设置的所有变量任务。

诀窍是使用一个变量前缀来保证很容易找到变量名。因此<xmlproperty>

答案 1 :(得分:0)

看起来我应该能够通过使用var task的unset属性来实现这一点。会报告回来......

相关问题