BashスクリプトのXMLファイルにカスタムXMLタグを挿入する

BashスクリプトのXMLファイルにカスタムXMLタグを挿入する

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を使用すると、要素に子ノードを追加して既存の要素を更新することもできます。要素が存在するかどうかを扱うには、次のようにします。

  1. 要素を削除します。
  2. 必要な値を持つ要素を追加します。

追加したい要素<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_groupXMLに要素を入力します。name属性を属性と一致させるには、にmain-server-group変更する必要があります。//server-group//server-group[@name="main-server-group"]


XMLStarlet は以下で使用できます。http://xmlstar.sourceforge.net/しかし、おそらくUnix用に事前にパッケージ化されたバージョンがあります(使用してください)。xml時にはXMLStarlet実行可能ファイルがxmlstarlet

おすすめ記事