bashを使用してスクリプトを作成してJBoss XML構成ファイルをランダムに実行し、特定のタグが表示されたらそこにいくつかのカスタム値を入れようとします。
次のXMLは、JBossサンプルのXML構成ファイルの重要な部分です。私がしなければならないのは、<jvm>
サーバーグループタグ内でタグを見つけて、<jvm-options>
タグが存在することを確認することです。それ以外の場合は追加し、存在する場合は<options>
その値を含むラベルを追加します。
<server-groups>
<server-group name="main-server-group" profile="full">
<jvm name="default">
<heap size="64m" max-size="512m"/>
<jvm-options>
<option value="-agentpath:"<DT_HOME>/agent/lib/libdtagent.so"=name=<AgentName>,server=<dynaTraceCollectorName>"/>
</jvm-options>
</jvm>
<socket-binding-group ref="full-sockets"/>
</server-group>
</server-groups>
</domain>
答え1
XMLStarletを使用すると、要素に子ノードを追加して既存の要素を更新することもできます。要素が存在するかどうかを扱うには、次のようにします。
- 要素を削除します。
- 必要な値を持つ要素を追加します。
追加したい要素<newtag>
があり、その値が必要であるとしますtagval
。また、newattr
値がある属性が必要ですattrval
。つまり、私たちが追加したいこと
<newtag newattr="attrval">tagval</newtag>
要素を削除するには:
$ xmlstarlet ed -d '//server-group/newtag' file.xml
属性を持つ要素を追加するには:
$ xmlstarlet ed -s '//server-group' -t elem -n 'newtag' -v 'tagval' \
-s '//server-group/newtag' -t attr -n 'newattr' -v 'attrval' file.xml
以下を一緒に追加してください。
$ xmlstarlet ed -d '//server-group/newtag' \
-s '//server-group' -t elem -n 'newtag' -v 'tagval' \
-s '//server-group/newtag' -t attr -n 'newattr' -v 'attrval' file.xml
与えられた入力XML
<?xml version="1.0"?>
<server-groups>
<server-group name="main-server-group" profile="full">
<jvm name="default">
<heap size="64m" max-size="512m"/>
<jvm-options>
<option value="somevalue"/>
</jvm-options>
</jvm>
<socket-binding-group ref="full-sockets"/>
</server-group>
</server-groups>
結果は次のとおりです。
<?xml version="1.0"?>
<server-groups>
<server-group name="main-server-group" profile="full">
<jvm name="default">
<heap size="64m" max-size="512m"/>
<jvm-options>
<option value="somevalue"/>
</jvm-options>
</jvm>
<socket-binding-group ref="full-sockets"/>
<newtag newattr="attrval">tagval</newtag>
</server-group>
</server-groups>
XPath式は//server-group
一致します。みんな server_group
XMLに要素を入力します。name
属性を属性と一致させるには、にmain-server-group
変更する必要があります。//server-group
//server-group[@name="main-server-group"]
XMLStarlet は以下で使用できます。http://xmlstar.sourceforge.net/しかし、おそらくUnix用に事前にパッケージ化されたバージョンがあります(使用してください)。xml
時にはXMLStarlet実行可能ファイルがxmlstarlet
。