假设我有一个像这样的macrodef

<macrodef name="Test">
    <element name="someName"/>
    <sequential>
        <java classname="path_to_Test">
            <classpath> blah </classpath>
            <arg value="someText and {valueOfsomeName}"/>
        </java>
    </sequential>
</macrodef>


然后进一步向下,我有一个使用此macrodef的目标,例如

<target name="testMacrodef">
    <Test>
        <someName value="someValue"/>
    </Test>
</target>


我的问题是,如何使{valueOfsomeName}精确地等于字符串someValue?我似乎根本无法使用它。

另外,仅出于上下文考虑,我不能仅使用属性标签代替元素标签,因为我需要将其作为可选参数。

我已经搜索Google很久了,试图为此找到解决方案。也许没有。但是据我所知,没有人问过这个问题,而且在Ant文档中似乎也没有很好地解决这个问题,因此,如果不可能的话,有没有办法提供可选属性?

编辑:拼写

最佳答案

如果element仅具有文本内容,则使用简单的echo。 :

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

<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 =>创建具有内容的属性(=字符串)。
当使用带有filterchain的xml标头的echoxml条时:

<loadfile srcfile=" ... " property="whatever">
 <filterchain>
  <headfilter lines="10" skip="1"/>
 </filterchain>
</loadfile>


根据您的需要调整headfilter lines属性的值。
财产将具有以下价值:

<echo>blablabla..</echo>

07-24 19:06