2011-02-04 5 views
0

私はこのようになりますBean構成XMLファイルがあります:私はSEDで動的に文字列#####を交換したいsedを使用して動的にBean設定XMLファイルにパッチを適用しますか?

<?xml version="1.0" encoding="UTF-8"?> 
<beans> 
    <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName"> 
      <value>MyDriver</value> 
     </property> 
     <property name="url"> 
      <value>#####</value> 
     </property> 
     <property name="username"> 
      <value>myUser</value> 
     </property> 
     <property name="password"> 
      <value>myPassword</value> 
     </property> 
    </bean> 
</beans> 

を。

#####は、異なる値を持つ場合があります。 myUrl1myUrl2などとその結果のようなものでなければなりませんmyUrlX

与えられた別のと交換する必要があります。これまでのところ私は、次のsedコマンドを用いて溶液に親しま

 ... 
     <property name="url"> 
      <value>myUrlX</value> 
     </property> 
     ... 

sed -n "1h;1!H;${;g;s|\(<property [^>]*>.*<value>\).*\(</value>.*</property>\)|\1myUrl\2|g;p;}" test.xml 

しかし、これは#####の代わりにmyPassword文字列をXMLファイルに置き換えます。

誰でも私のsedコマンドで変更する必要があるヒントを教えてください。

ありがとうございます!

答えて

1

使用xmlstarlet

xml ed --update "/beans/bean[@id='myDataSource']/property[@name='url']/value" --value myUrlX inputfile.xml 

クエリに:

xml sel -t -m "/beans/bean[@id='myDataSource']/property[@name='url']" -v value inputfile.xml 

は、それらを一緒に入れてください:私のシステムで

#!/bin/bash 
file=inputfile.xml 
val=$(xml sel -t -m "/beans/bean[@id='myDataSource']/property[@name='url']" -v value "$file") 
if [[ $val == "foo" ]] 
then 
    val=bar 
    xml ed --update "/beans/bean[@id='myDataSource']/property[@name='url']/value" --value "$val" "$file" 
fi 

を、コマンドがxmlstarlet代わりのxmlです。

Don't use regexes.

+0

ありがとうございます!それが私の問題を解決しました! – Peter

+0

@Peter:私は助けてくれてうれしいです。あなたが答えを見つけたので、それを合格とマークしてください。 –

関連する問題