2012-09-13 57 views
4

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

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

任何想法?我正在寻找理想的是那被称为像

<xmlvars file="myxmlpropertyfile.xml"/> 

这将与它覆盖的变量异常功能类似于

<xmlproperty file="myxmlpropertyfile.xml"/> 

任务。

+0

为了澄清第一段 - 我的意思是我想运行一些我的任务迭代。每次迭代时,我想根据不同版本的mysemlproperties.xml(在不同的目录中找到)将myxmlproperties.xml中存在的属性设置为不同的值。 – grumblebeans

回答

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/>意味着做你想做的。然后,在转到外部循环的下一次迭代之前,请执行一个循环,该循环将取消您之前在<xmlproperty>任务中设置的所有变量。

诀窍是使用一个变量前缀,以保证变量名称很容易找到。因此foo-fighters

0

它看起来像我应该能够通过使用var任务的unset属性来完成此操作。将回报...

+0

它的工作原理。每次迭代我只需使用xmlproperty任务设置属性,然后循环访问属性以取消设置。然后,我会从新的XML文件中加载它们。 – grumblebeans