xmlをシェルスクリプトのパラメータとして解析する方法

xmlをシェルスクリプトのパラメータとして解析する方法

これは私のサンプルXMLファイルです。 max_sizeを出力にインポートする必要がありますか?

私はxlimitとxpathを使ってみましたが、どちらもうまくいきませんでした。

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-service>
   <service_info name="dummyapp" version="5.0"
   <object name="WebApplications">
      <item Location="dummyapp/ear/dummyapp.ear" name="dummy"/>
   </object>
   <object name="jdbc_oracle_nonxa">
      <item db_name="MYDB1" db_user="dummyapp_user" global_trans="None" initial_size="10" jndi_name="dummyapp-aty-ds" max_size="25" name="dummyapp-aty-ds" statement_cache_size="10"/>
</object>

ベストアンサー1

XMLがうまく構成されているとします。

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-service>
  <service_info name="dummyapp" version="5.0"/>
  <object name="WebApplications">
    <item Location="dummyapp/ear/dummyapp.ear" name="dummy"/>
  </object>
  <object name="jdbc_oracle_nonxa">
    <item db_name="MYDB1" db_user="dummyapp_user" global_trans="None" initial_size="10" jndi_name="dummyapp-aty-ds" max_size="25" name="dummyapp-aty-ds" statement_cache_size="10"/>
  </object>
</weblogic-service>

(質問に閉じていないタグは閉じました)

... この場合、以下が出力されます25(この例の場合)。

xml sel -t -v '//item/@max_size' -nl file.xml

これは使用中ですXMLスターmax_valueすべてのノードの属性値を取得しますitem。最後に、-nl出力の後に改行文字を挿入します。

itemより具体的に説明し、ノード内のノードだけを見なければならない場合は、次のようになります。objectnamejdbc_oracle_nonxa

xml sel -t -v '//object[@name="jdbc_oracle_nonxa"]/item/@max_size' -nl file.xml

XMLStarletはxmlstarletインストールされているのではなく、xml一部のシステムにインストールされることに注意してください。


使用xmllint(出力の終わりに改行なし):

xmllint --xpath 'string(//object[@name="jdbc_oracle_nonxa"]/item/@max_size)' file.xml

おすすめ記事