Ksh

從文件中提取 xml 標記值到變數

  • March 2, 2018

我有一個文件。我需要在哪裡提取 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. 它容易出錯且脆弱。

引用自:https://unix.stackexchange.com/questions/427637