【问题标题】:How can I load variables from an XML properties file?如何从 XML 属性文件加载变量?
【发布时间】:2023-04-05 10:07:01
【问题描述】:

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

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

有什么想法吗?我理想中寻找的是一个类似的任务

<xmlvars file="myxmlpropertyfile.xml"/>

它的功能就像

<xmlproperty file="myxmlpropertyfile.xml"/>

除了它会覆盖变量。

【问题讨论】:

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

标签: java xml ant ant-contrib


【解决方案1】:

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

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

类似这样,但未经测试:

 <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>

基本上,您使用外部的&lt;for&gt; 循环遍历您的目录,并使用&lt;xmlproperty&gt; 设置属性名称。 &lt;blah blah blah/&gt; 表示做你想做的事。然后,在您进入外部&lt;for&gt; 循环的下一次迭代之前,您执行一个inner &lt;for&gt; 循环,它将取消设置您之前在&lt;xmlproperty&gt; 任务中设置的所有变量。

诀窍是使用变量前缀来保证变量名很容易找到。因此foo-fighters

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 它有效。每次迭代我只是使用 xmlproperty 任务设置属性,然后循环遍历属性以取消设置它们。然后我从一个新的 XML 文件中重新加载它们。
    猜你喜欢
    • 2011-06-20
    • 2020-03-09
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 2023-03-14
    • 2015-12-15
    相关资源
    最近更新 更多