ローカル開発用に特別な web.xml を作成しようとしています。
最終的なweb.xml内の特定の位置に選択して貼り付ける必要がある別のxmlファイルにいくつかのタグを保存しています。
これを実現するために、次の方法でコピーと貼り付けのアクションを使用しています。
<xmltask source="templates.xml">
<copy path="//data/init-param" buffer="initParamBuffer"/>
</xmltask>
<xmltask source="web.xml" dest="web.xml">
<paste path="//web-app/filter[contains(./filter-name,'MyFilter')]
/init-param[contains(./param-name,
'MyInitParameter')]"
position="after" buffer="initParamBuffer"/>
</xmltask>
私の意図は、ソース ファイルからすべての init-param タグを収集し、貼り付け操作で選択したタグの後に貼り付けることです。
また、contains()関数で指定内容のタグを含むタグを選択する部分もスムーズに動きません。
この xpath 式を形成するためのより良い方法があるかもしれません...
アップデート:
前に書いたように、私はこの問題への最善のアプローチを知りません。スタイルシートを使用して変換する可能性について読んだことがありますが、ant-xmltask はより洗練されたソリューションであると約束されていたので、これを最初に試しました。
私がこのアプローチを採用した限り、このアプローチを使用して web.xml にタグを挿入/書き込むことができます。少し複雑でない場所に単一の init-param タグを挿入することに成功しました。
<paste path="//web-app/filter[1]/init-param"
position="after" buffer="initParamBuffer"/>
だから私の問題は次のとおりでした: A: バッファに複数のタグを選択したい B: そのバッファの内容を名前 (インデックスではない) で指定されたタグの後に挿入したい。
ソース (templates.xml) を web.xml に挿入する例を次に示します。
<data>
<init-param>
<param-name>newparam1</param-name>
<param-value>1</param-value>
</init-param>
<init-param>
<param-name>newparam2</param-name>
<param-value>2</param-value>
</init-param>
</data>
上記のセクションを貼り付ける web.xml の一部を次に示します。
<web-app>
<filter-mapping>
<filter-name>SomeFilter</filter-name>
<url-pattern>/somePath/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/myPath/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>SomeFilter</filter-name>
<filter-class>foo.bar.SomeFilter</filter-class>
<init-param>
<param-name>SomeInitParameter</param-name>
<param-value>4711</param-value>
</init-param>
</filter>
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>foo.bar.MyFilter</filter-class>
<init-param>
<param-name>MyInitParameter</param-name>
<param-value>0815</param-value>
</init-param>
</filter>
</web-app>
そして、ここに私が達成したい結果があります:
<web-app>
<filter-mapping>
<filter-name>SomeFilter</filter-name>
<url-pattern>/somePath/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/myPath/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>SomeFilter</filter-name>
<filter-class>foo.bar.SomeFilter</filter-class>
<init-param>
<param-name>SomeInitParameter</param-name>
<param-value>4711</param-value>
</init-param>
</filter>
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>foo.bar.MyFilter</filter-class>
<init-param>
<param-name>MyInitParameter</param-name>
<param-value>0815</param-value>
</init-param>
<init-param>
<param-name>newparam1</param-name>
<param-value>1</param-value>
</init-param>
<init-param>
<param-name>newparam2</param-name>
<param-value>2</param-value>
</init-param>
</filter>
</web-app>