1
 <target name="openAssetXMLFile">
   <for list="${LogOfCurrentAssetChanges}" delimiter="${line.separator}" param="paths">
     <sequential>
       <xmltask source="${basedir}@{paths}">
         <copy path="/x/id/text()" attrValue="true" property="type"/>
         <copy path="/x/attribute[9]/data/stringValue/text()" attrValue="true" property="uid"/> 
       </xmltask>
       <echo> ${type}</echo>
       <echo> ${basedir}@{paths}</echo>
       <echo> ${uid}</echo>
     </sequential>
   </for>       
 </target>

私はここでかなり無力であり、助けを求めています. したがって、マクロ定義を使用するシーケンシャルを使用する上記のビルドファイルのスニペットがあるため、文字列は通常の $ 記号ではなく @ 記号で参照する必要があります。

一部の xml ファイルへの相対参照を含む logofcurrentassetchanges ファイルがあります。これを現在のディレクトリと連結して、絶対参照名を生成する必要があります。連結された文字列を完璧にエコーすると、forループの反復ごとに、期待どおりに異なるxml文字列が出力されます。ただし、上記のようにxmltaskで使用すると、すべての反復で最初のソースが使用されますか? xmltask ソース属性を元の古い値からフラッシュするために、リフレッシュ/クリーンアップまたは何かを行う必要がありますか? または、この問題を解決するためにできることはありますか。echo ステートメントからの出力例:

 [echo]  CSElement:1242615155986
 [echo]  /y/z/t/u/11/67/MFootsfgsgfser(e7e105ef-660f-4363-8018-638f87ba06be).main.xml
 [echo]  7d454a57-fe1a-48c1-994c-bbcbbf9f78e4
 [echo]  CSElement:1242615155986
 [echo]  /a/b/c/MORegistsfgsfgfsgerLogsfgshinLinsgsfgks.jsp.main.xml
 [echo]  7d454a57-fe1a-48c1-994c-bbcbbf9f78e4

ここでは、タイプと uid が繰り返されますが、印刷するとパスが正しく表示されます。

4

1 に答える 1

1

(少なくとも一部の)問題は、コピーが Ant プロパティ (およびxmltaskという名前) に割り当てられることです。Ant プロパティ - ant-contrib変数とは異なり、通常は不変であるため、一度値を設定すると変更されません。これはあなたが見ているものです。typeuid@

Ant バージョン 1.8 以降localでは、現在の「ブロック」にプロパティのスコープを設定するために使用できるタスクが呼び出されるため、for反復ごとに異なる値を使用できます。次のようになります。

<sequential>
   <local name="type" />
   <local name="uid" />
   <xmltask source="${basedir}@{paths}">
   ... etc.
于 2013-01-07T21:54:28.370 に答える