Ksh
從文件中提取 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">
假設 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>
您將通過XMLStarlet獲取節點中屬性的值,
name
如下所示:dataTemplate
LOBCODE=$( xml sel -t -v '/dataTemplate/@name' "$filename" )
XMLStarlet 有時安裝為
xmlstarlet
而不是xml
.使用
xmllint
:LOBCODE=$( xmllint --xpath 'string(/dataTemplate/@name)' "$filename" )
請不要嘗試使用
sed
. 它容易出錯且脆弱。