获取 Ant 元素中保存的值
Get value held in Ant element
假设我有一个像这样的 macrodef
<macrodef name="Test">
<element name="someName"/>
<sequential>
<java classname="path_to_Test">
<classpath> blah </classpath>
<arg value="someText and {valueOfsomeName}"/>
</java>
</sequential>
</macrodef>
然后再往下我有一个使用这个宏定义的目标,比如
<target name="testMacrodef">
<Test>
<someName value="someValue"/>
</Test>
</target>
我的问题是,如何让 {valueOfsomeName}
准确地成为字符串 someValue
?我似乎根本无法让它工作。
另外,为了说明一些上下文,我不能只使用属性标签而不是元素标签,因为我需要它作为一个 可选 参数。
我在谷歌上搜索了很长时间,试图找到解决这个问题的方法;也许没有。但据我所知,没有人问过这个问题,而且 Ant 文档中似乎也没有很好地涵盖它,所以如果不可能的话,有没有办法拥有一个可选属性?
编辑:拼写
我总是这样做:
<macrodef name="test">
<attribute name="foo"/>
<sequential>
<echo message="@{foo}"></echo>
</sequential>
</macrodef>
<target name="so">
<test foo="Hello SO." />
</target>
希望对您有所帮助。
如果元素只有文本内容,则使用简单的 echo,f.e。 :
<macrodef name="Test">
<element name="someName" optional="yes"/>
<attribute name="foo" default="bar"/>
<sequential>
<echo>
<someName/>
</echo>
<echo> @@{foo} => @{foo}</echo>
</sequential>
</macrodef>
<Test>
<someName>blablabla..</someName>
</Test>
输出:
[echo]
[echo] blablabla..
[echo] @{foo} => bar
否则对于嵌套的 xml 内容使用 echoxml、f.e。 :
<macrodef name="Test">
<element name="someName" optional="yes"/>
<attribute name="foo" default="bar"/>
<sequential>
<echoxml>
<someName/>
</echoxml>
<echo> @@{foo} => @{foo}</echo>
</sequential>
</macrodef>
<Test>
<someName>
<echo>blablabla..</echo>
</someName>
</Test>
输出:
<?xml version="1.0" encoding="UTF-8"?>
<echo>blablabla..</echo>
[echo] @{foo} => bar
如果您需要元素值进行进一步处理,请使用 echo / echoxml 进行归档,然后使用 loadfile。
--评论后编辑--
回显到文件:
<macrodef name="Test">
<element name="someName" optional="yes"/>
<attribute name="foo" default="bar"/>
<sequential>
<echo file="somefile.txt">
<someName/>
</echo>
<echo> @@{foo} => @{foo}</echo>
</sequential>
或
<macrodef name="Test">
<element name="someName" optional="yes"/>
<attribute name="foo" default="bar"/>
<sequential>
<echoxml file="somefile.txt">
<someName/>
</echoxml>
<echo> @@{foo} => @{foo}</echo>
</sequential>
然后使用 loadfile => 创建带有内容的 属性(= 字符串)。
当使用带过滤链的 xml header 的 echoxml strip 时:
<loadfile srcfile=" ... " property="whatever">
<filterchain>
<headfilter lines="10" skip="1"/>
</filterchain>
</loadfile>
根据您的需要调整 headfilter lines 属性的值。
属性 任何值都会有 :
<echo>blablabla..</echo>
假设我有一个像这样的 macrodef
<macrodef name="Test">
<element name="someName"/>
<sequential>
<java classname="path_to_Test">
<classpath> blah </classpath>
<arg value="someText and {valueOfsomeName}"/>
</java>
</sequential>
</macrodef>
然后再往下我有一个使用这个宏定义的目标,比如
<target name="testMacrodef">
<Test>
<someName value="someValue"/>
</Test>
</target>
我的问题是,如何让 {valueOfsomeName}
准确地成为字符串 someValue
?我似乎根本无法让它工作。
另外,为了说明一些上下文,我不能只使用属性标签而不是元素标签,因为我需要它作为一个 可选 参数。
我在谷歌上搜索了很长时间,试图找到解决这个问题的方法;也许没有。但据我所知,没有人问过这个问题,而且 Ant 文档中似乎也没有很好地涵盖它,所以如果不可能的话,有没有办法拥有一个可选属性?
编辑:拼写
我总是这样做:
<macrodef name="test">
<attribute name="foo"/>
<sequential>
<echo message="@{foo}"></echo>
</sequential>
</macrodef>
<target name="so">
<test foo="Hello SO." />
</target>
希望对您有所帮助。
如果元素只有文本内容,则使用简单的 echo,f.e。 :
<macrodef name="Test">
<element name="someName" optional="yes"/>
<attribute name="foo" default="bar"/>
<sequential>
<echo>
<someName/>
</echo>
<echo> @@{foo} => @{foo}</echo>
</sequential>
</macrodef>
<Test>
<someName>blablabla..</someName>
</Test>
输出:
[echo]
[echo] blablabla..
[echo] @{foo} => bar
否则对于嵌套的 xml 内容使用 echoxml、f.e。 :
<macrodef name="Test">
<element name="someName" optional="yes"/>
<attribute name="foo" default="bar"/>
<sequential>
<echoxml>
<someName/>
</echoxml>
<echo> @@{foo} => @{foo}</echo>
</sequential>
</macrodef>
<Test>
<someName>
<echo>blablabla..</echo>
</someName>
</Test>
输出:
<?xml version="1.0" encoding="UTF-8"?>
<echo>blablabla..</echo>
[echo] @{foo} => bar
如果您需要元素值进行进一步处理,请使用 echo / echoxml 进行归档,然后使用 loadfile。
--评论后编辑--
回显到文件:
<macrodef name="Test">
<element name="someName" optional="yes"/>
<attribute name="foo" default="bar"/>
<sequential>
<echo file="somefile.txt">
<someName/>
</echo>
<echo> @@{foo} => @{foo}</echo>
</sequential>
或
<macrodef name="Test">
<element name="someName" optional="yes"/>
<attribute name="foo" default="bar"/>
<sequential>
<echoxml file="somefile.txt">
<someName/>
</echoxml>
<echo> @@{foo} => @{foo}</echo>
</sequential>
然后使用 loadfile => 创建带有内容的 属性(= 字符串)。
当使用带过滤链的 xml header 的 echoxml strip 时:
<loadfile srcfile=" ... " property="whatever">
<filterchain>
<headfilter lines="10" skip="1"/>
</filterchain>
</loadfile>
根据您的需要调整 headfilter lines 属性的值。
属性 任何值都会有 :
<echo>blablabla..</echo>