0

antを使用して、以下のxmlファイルのコンポーネントの登録と管理の数値を更新したい

XML:-

<?xml version="1.0" encoding="UTF-8" ?>  
<Application>  
<component>  
<name>Regist</name>  
<filename>v1.5.0.4-Regist.zip</filename>  
<version>v1.5.0.4</version>  
<size>1001518</size>  
</component>  
<component>
<name>Manage</name>  
<filename>v1.5.1.1-manage.jar</filename>  
<version>v1.5.1.1</version>  
<size>3795024</size>  
</component>  
</Application>  

Ant はスクリプトをトラバースできますが、上記の構造によりコンポーネントを区別できません。上記の xml コンポーネントを以下のプロパティとして識別します。

Application.component.filename=v1.5.0.4-Regist.zip,v1.5.1.1-manage.jar   
Application.component.name=Regist,Manage   
Application.component.size=1001518,3795024   
Application.component.version=v1.5.0.4,v1.5.1.1   

コンポーネントの登録と管理を別々に実行しています。新しい値は、コンポーネントに関してこの XML に更新されます。

ant を介してコンポーネントに関するプロパティを取得する方法はありますか?

4

1 に答える 1

2

XPath を使用して各コンポーネントを一意に識別する必要があるように思えます。まず、関連する SO question があります。Xpathを検索することを知らなかったと思います。それがこの状況で役立つからです。それでも、この回答でいくつかのオプションを要約します。

xmlタスク

最良の選択肢のように見えます。XML 値をプロパティにプルするには:

<xmltask source="map.xml">
  <!-- copies to a property 'user' -->
  <copy path="/map/entry[@key='database.user']/@value" attrValue="true" property="user"/>
</xmltask>

ant-xpath-タスク

また、XML からシステム プロパティに値を取得できるように見えますが、ドキュメントが非常に不足しています。

<target name="find-hrefs">
  <xpath document="foo.xhtml" xpath="/html/body/a/@href" outputproperty="hrefs"/> 
</target>

Ant 経由のスクリプト エンジン

これは、関連する SO の質問に記載されています。回答で Javascript を使用して、XML からデータを抽出し、システム プロパティに保存します。しかし最近では、Groovy または Scala スクリプト エンジンのサポートを使用して、より簡潔な構文を使用できるかもしれません。

コア スタイル アリ タスク

XSLT を使用して XML を操作します。XML から値を引き出すのには役立たないと思いますが、いくつかの値やノードを変更する必要があるかもしれません。

于 2013-10-31T22:36:07.153 に答える