ファイルからxmlタグ値を変数として抽出する

ファイルからxmlタグ値を変数として抽出する

ファイルがあります。そこから dataTemplate の名前を抽出する必要があります。 datalob=XXPFARCUDO_DATA の値が必要です。

<?xml version="1.0" encoding="windows-1252" ?>
<dataTemplate name="XXPFARCUDO_DATA" description="Ctrole de cohnce des clits doeux et conteeux" Version="1.0">
 <parameters>
  <parameter name="P_SOCIETE"               dataType="character"/>
 </parameters>
.
.
.
.
</dataTemplate>

コードがありますが動作しません。

filename='XXPFARCUDO_DATA.xml'
LOBCODE=$(sed -n 's:.*<dataTemplate name="\(.*\)" description=".*:\1:p' "${filename}")
echo " --> ${LOBCODE} "

結果が間違っています

 --> XXPFARCUDO_DATA▒role de cohnce des clits doeux et conteeux" Version="1.0">

答え1

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

<?xml version="1.0" encoding="windows-1252"?>
<dataTemplate name="XXPFARCUDO_DATA" description="Ctrole de cohnce des clits doeux et conteeux" Version="1.0">
  <parameters>
    <parameter name="P_SOCIETE" dataType="character"/>
  </parameters>
</dataTemplate>

次の方法でノードnameの属性値を取得できます。dataTemplateXMLスターこのように:

LOBCODE=$( xml sel -t -v '/dataTemplate/@name' "$filename" )

XMLStarletは時々asではなくxmlstarletasとしてインストールされますxml

使用xmllint:

LOBCODE=$( xmllint --xpath 'string(/dataTemplate/@name)' "$filename" )

エラーが発生しやすく壊れやすいので、使用しないでくださいsed

関連情報