Ant xmlproperty任务.当有多个具有相同名称的标签时会发生什么?

Mat*_*yde 5 xml ant

我试图遵循我给出的大型ant构建文件,在这种情况下我无法理解xmlproperty的功能.考虑这个xml文件example.xml.

<main>
  <tagList>
    <tag>
      <file>file1</file>
      <machine>machine1</machine>
    </tag>
    <tag>
      <file>file2</file>
      <machine>machine2</machine>
    </tag>
  </tagList>
</main>
Run Code Online (Sandbox Code Playgroud)

在构建文件中,有一个任务可以简化为以下示例:

<xmlproperty file="example.xml" prefix="PREFIX" />
Run Code Online (Sandbox Code Playgroud)

据我所知,如果只有一个<tag>元素,我可以得到<file>with 的内容,${PREFIX.main.tagList.tag.file} 因为它大致相当于写这个:

<property name="PREFIX.main.tagList.tag.file" value="file1"/>
Run Code Online (Sandbox Code Playgroud)

但是,由于有两个<tag>,${PREFIX.main.tagList.tag.file}在这种情况下的价值是多少?如果它是某种列表,我如何迭代这两个<file>值?

我正在使用ant 1.6.2.

Cha*_*uis 10

当多个元素具有相同名称时,<xmlproperty>使用逗号分隔值创建属性:

<project name="ant-xmlproperty-with-multiple-matching-elements" default="run" basedir=".">
    <target name="run">
        <xmlproperty file="example.xml" prefix="PREFIX" />

        <echo>${PREFIX.main.tagList.tag.file}</echo>
    </target>
</project>
Run Code Online (Sandbox Code Playgroud)

结果:

run:
     [echo] file1,file2
Run Code Online (Sandbox Code Playgroud)

要处理以逗号分隔的值,请考虑使用第三方Ant-Contrib库中<for>任务:

<project 
    name="ant-xmlproperty-with-multiple-matching-elements" 
    default="run" 
    basedir="." 
    xmlns:ac="antlib:net.sf.antcontrib"
    >
    <taskdef resource="net/sf/antcontrib/antlib.xml" />
    <target name="run">
        <xmlproperty file="example.xml" prefix="PREFIX" />

        <ac:for list="${PREFIX.main.tagList.tag.file}" param="file">
            <sequential>
                <echo>@{file}</echo>
            </sequential>
        </ac:for>
    </target>
</project>
Run Code Online (Sandbox Code Playgroud)

结果:

run:
     [echo] file1
     [echo] file2
Run Code Online (Sandbox Code Playgroud)

  • 很好的解释,谢谢.为了澄清读取此内容的任何其他人,默认情况下,<for>标记似乎在逗号分隔符上循环,这与相同的xmlproperty默认分隔符很好地配合. (2认同)