将 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 有时安装为xmlstarlet而不是安装为xml

使用xmllint

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

请不要尝试使用sed.它容易出错且脆弱。

相关内容