たぶん、すでに使用しているフラカを使用しているとき:
<!-- Activate flaka for all ant tasks -->
<fl:install-property-handler/>
と組み合わせ :
#{ x * y}
antcontribが私のマシンにインストールされていないので、何とか動作しますが、テストしませんでした。
プロパティハンドラーを使用すると、すべてのantタスク内でEL式を使用できます。
これは、与えられたファイルfoo.xmlの小さな例で、xmltaskとflakaが必要です。
<whatever>
<sprite name="timer" path="img/folder1/img1.jpg" pos-x="25" pos-y="4" xref=""/>
<sprite name="timer1" offset-x="100" offset-y="10" path="img/folder1/img2.jpg" pos-x="26" pos-y="4" xref=""/>
<control name="timer2" offset-y="10" path="img/folder1/img2.jpg" pos-x="27" pos-y="4" size="100" xref=""/>
</whatever>
foo.xmlを適切に編集します:
<project xmlns:fl="antlib:it.haefelinger.flaka">
<!-- Activate flaka for all ant tasks -->
<fl:install-property-handler/>
<!-- Import XMLTask -->
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
<!-- get a list with all pos-x attribute values -->
<xmltask source="foo.xml">
<copy path="//whatever/*/@pos-x" append="true" propertySeparator="," property="posxlist"/>
</xmltask>
<echo>$${posxlist} => ${posxlist}</echo>
<fl:let>counter ::= 1</fl:let>
<!-- for loop with xmltask editing foo.xml in place => source = dest -->
<fl:for var="posx" in="split('${posxlist}', ',')">
<xmltask source="foo.xml" dest="foo.xml" report="true">
<!-- i.e. multiplicating value * 3 -->
<attr path="//whatever/*[${counter}]" attr="pos-x" value="#{posx * 3}"/>
</xmltask>
<fl:let>counter ::= '${counter}' + 1</fl:let>
</fl:for>
</project>
出力:
[xmltask] Cannot append values to properties
[xmltask] Cannot append values to properties
[xmltask] Cannot append values to properties
[echo] ${posxlist} => 25,26,27
[xmltask] Document -->
[xmltask] <whatever>
[xmltask] <sprite name="timer" path="img/folder1/img1.jpg" pos-x="75" pos-y="4" xref=""/>
[xmltask] <sprite name="timer1" offset-x="100" offset-y="10" path="img/folder1/img2.jpg" pos-x="26" pos-y="4" xref=""/>
[xmltask] <control name="timer2" offset-y="10" path="img/folder1/img2.jpg" pos-x="27" pos-y="4" size="100" xref=""/>
[xmltask] </whatever>
[xmltask] Document <--
[xmltask] Document -->
[xmltask] <whatever>
[xmltask] <sprite name="timer" path="img/folder1/img1.jpg" pos-x="75" pos-y="4" xref=""/>
[xmltask] <sprite name="timer1" offset-x="100" offset-y="10" path="img/folder1/img2.jpg" pos-x="78" pos-y="4" xref=""/>
[xmltask] <control name="timer2" offset-y="10" path="img/folder1/img2.jpg" pos-x="27" pos-y="4" size="100" xref=""/>
[xmltask] </whatever>
[xmltask] Document <--
[xmltask] Document -->
[xmltask] <whatever>
[xmltask] <sprite name="timer" path="img/folder1/img1.jpg" pos-x="75" pos-y="4" xref=""/>
[xmltask] <sprite name="timer1" offset-x="100" offset-y="10" path="img/folder1/img2.jpg" pos-x="78" pos-y="4" xref=""/>
[xmltask] <control name="timer2" offset-y="10" path="img/folder1/img2.jpg" pos-x="81" pos-y="4" size="100" xref=""/>
[xmltask] </whatever>
[xmltask] Document <--
BUILD SUCCESSFUL
Total time: 826 milliseconds
警告「プロパティに値を追加できません」は、com.oopsconsultancy.xmltask.CopyAction行80から発生し、antのプロパティは不変であり、安全に無視できることを強調します。または、ソースから削除してxmltask.jarを再構築することをお勧めします。