ファイルがあります。そこから 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
の属性値を取得できます。dataTemplate
XMLスターこのように:
LOBCODE=$( xml sel -t -v '/dataTemplate/@name' "$filename" )
XMLStarletは時々asではなくxmlstarlet
asとしてインストールされますxml
。
使用xmllint
:
LOBCODE=$( xmllint --xpath 'string(/dataTemplate/@name)' "$filename" )
エラーが発生しやすく壊れやすいので、使用しないでくださいsed
。