파일에서 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은 때때로 as xmlstarlet대신 as로 설치됩니다 xml.

사용 xmllint:

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

오류가 발생하기 쉽고 깨지기 쉬우므로 사용하지 마십시오 sed.

관련 정보