Imprime texto entre duas tags XML

4

Considere o seguinte trecho de um arquivo XML grande:

  ...
  <serverName someKey="false" anotherKey="0.05" thirdKey="0.04">
    <default>blah.blah.blah</default>
    <region name="US">us.blah.net</region>
    <region name="EU">eu.blah.net</region>
    <region name="IL">il.blah.net</region>
  </serverName>
  ...

Como imprimo as linhas entre a tag de abertura <serverName ...> e a tag de fechamento </serverName> ?

    
por Adam Matan 24.04.2013 / 17:33

3 respostas

5

sed é uma ótima ferramenta, mas o XML eventualmente fará com que qualquer programador que se aproxime dele com um choro REGEX. Eu sei. Eu estive lá. Se houver a menor chance de que seus dados sejam alterados, você deseja um analisador XML adequado.

Minha escolha seria usar o BeautifulSoup, mas isso torna o manuseio direto do Bash bastante difícil. Se você quer escrever um script intermediário em Python, ainda é uma opção ... Caso contrário, xpath é uma opção bastante clássica. É um wrapper da biblioteca libxml do Perl e faz algumas coisas bastante poderosas.

sudo apt-get install libxml-xpath-perl

E, para o seu exemplo, veja como eu faria isso em a linguagem de consulta do xpath :

xpath -e '*/serverName/*' big_xml_file.xml

Novamente, se você precisar fazer algo útil com esse XML, considere algo ainda mais strong, como o BeautifulSoup e o Python.

    
por Oli 24.04.2013 / 17:58
2
sed -n '/<serverName/,/<\/serverName/p' big_xml_file.xml

Fez o truque (adaptado de este post em linuxquestions.org).

No Ubuntu 14.04:

$ sed -n '/<serverName/,/<\/serverName/p' big.xml
<serverName someKey="false" anotherKey="0.05" thirdKey="0.04">
  <default>blah.blah.blah</default>
  <region name="US">us.blah.net</region>
  <region name="EU">eu.blah.net</region>
  <region name="IL">il.blah.net</region>
</serverName>
    
por Adam Matan 24.04.2013 / 17:33
0

Também posso imaginar que você precise encontrar um servidor específico em uma lista mais longa, juntamente com determinadas configurações ou regiões com base em alguns caminhos condicionais.

Nesse caso, recomendo agrupar suas instruções e condições XPATH em uma folha de estilo XSLT. Há um número de analisadores XSLT disponíveis nos repositórios para trabalhar com a linha de comando, PHP, Perl, Python, Java, etc.

XSLT é muito poderoso e pode produzir texto, xml e html.

    
por chaskes 24.04.2013 / 18:26

Tags