Apache Ant:如何使用XmlProperty中的特定数据执行目标内部条件

时间:2011-03-31 22:29:24

标签: xml apache ant maven

<item>
 <property name="someId" selected="true"></property>
 <property name="someId2"></property>
</item>

这是我的XmlProperty文件,现在我的目标只需要实现具有所选属性的属性,我不知道用ApacheAnt通过索引访问属性的任何方式,或者使用foreach&amp; XmlProperty上的索引。

THX:)

4 个答案:

答案 0 :(得分:1)

重构XML属性定义是否有帮助,以便您可以按名称访问属性。

重组的XML属性:

<item>
 <someId selected="true"/>
 <someId2/>
</item>

构建文件:

<project default="conditionals">

  <xmlproperty file="properties.xml" keepRoot="false" collapseAttributes="true"/>

  <target name="conditionals" depends="ifSomeId, ifSomeId2"/>

  <target name="ifSomeId" if="someId.selected">
    <echo message="in ifSomeId"/>
  </target>

  <target name="ifSomeId2" if="someId2.selected">
    <echo message="in ifSomeId2"/>
  </target>

</project>

输出:

$ ant
Buildfile: build.xml

ifSomeId:
     [echo] in ifSomeId

ifSomeId2:

conditionals:

BUILD SUCCESSFUL
Total time: 0 seconds

答案 1 :(得分:0)

您可以通过过滤器链在ant中加载属性文件,该过滤器链会排除没有selected="true"属性的属性。

答案 2 :(得分:0)

在我的情况下情况有所不同,我有一个名为settings的标签,他包含标签项目的10倍,就像项目数组一样,现在我对检查每个项目都不感兴趣,我想切片或者只需按索引或类似的方式访问特定的, 这是我目前的解决方案。

 <target name="GetSettings">
    <echo message="Getting settings for compiling"></echo>
    <loadfile srcfile="Settings.xml" property="settings">
      <filterchain>
        <linecontains>
          <contains value="selected"></contains>
        </linecontains>
      </filterchain>
    </loadfile>
    <echo message="${settings}" file="temp.xml"></echo>
    <xmlproperty file="temp.xml" collapseAttributes="true"></xmlproperty>
    <delete file="temp.xml"></delete>
  </target>

不完美但工作得很好。

答案 3 :(得分:0)

对于由xmlproperty文件驱动的Ant脚本,您应该使用Xpath的强大功能。在xmltask的帮助下(推荐用于工作流程中的所有xml相关部分),您可以这样做=

你的xmlproperty文件somefile.xml =

<item>
 <property name="someId" selected="true"></property>
 <property name="someId2"></property>
</item>
使用xpath的xmltask的示例脚本,对于每个匹配, 引用目标'sometarget'被称为=

 <project default="main">

 <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>

 <target name="main">
  <xmltask source="somefile.xml">
   <call path="/item/property[@selected='true']" target="sometarget">
    <param name="name" path="@name"/>
   </call>
  </xmltask>
 </target>

 <target name="sometarget">

   <echo>${name}</echo>

 </target>

</project>

输出=

[echo]     someId

xpath =

的一些资源
  1. XPath教程:http://zvon.org/xxl/XPathTutorial/General/examples.html
  2. 用于评估XPath表达式的Eclipse插件:XPath Developer
  3. 评估xpath表达式的工具:XPathExplorer