extrai o valor da tag xml do arquivo para Variable

0

Eu tenho um arquivo. onde eu preciso extrair o nome do dataTemplate. precisa de um valor em 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>

Eu tenho código, mas não está funcionando

filename='XXPFARCUDO_DATA.xml'
LOBCODE=$(sed -n 's:.*<dataTemplate name="\(.*\)" description=".*::p' "${filename}")
echo " --> ${LOBCODE} "

o resultado não está correto

 --> XXPFARCUDO_DATA▒role de cohnce des clits doeux et conteeux" Version="1.0">
    
por Arun GoWdA 02.03.2018 / 09:50

1 resposta

2

Supondo que o XML esteja bem formado, como

<?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>

Você obteria o valor do atributo name no nó dataTemplate por meio de XMLStarlet assim:

LOBCODE=$( xml sel -t -v '/dataTemplate/@name' "$filename" )

Às vezes, o XMLStarlet é instalado como xmlstarlet em vez de xml .

Usando xmllint :

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

Por favor, não tente analisar XML usando sed . É propenso a erros e frágil.

    
por 02.03.2018 / 09:57

Tags