我有一个文件。我需要在其中提取 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 有时安装为xmlstarlet
而不是安装为xml
。
使用xmllint
:
LOBCODE=$( xmllint --xpath 'string(/dataTemplate/@name)' "$filename" )
请不要尝试使用sed
.它容易出错且脆弱。