Como analisar um arquivo xml em um script de shell

4

Gostaria de saber como dividir meus dados do seguinte formato:

<datas>
 <data>
  <name>Name1</name>
 </data>
 <data>
  <name>Name2</name>
 </data>
</datas>

para o seguinte formato:

<data><name>Name1</name></data>
<data><name>Name2</name></data>

Os dados analisados seriam enviados para um script Python da seguinte forma:

 python script.py <data><name>Name1<name></data>
 python script.py <data><name>Name2<name></data>

Eu tentei comandos como:

echo 'cat /datas/data' | xmllint --shell file.xml

mas como posso passar a saída no formato desejado para o script Python?

    
por Aryise 14.07.2016 / 16:51

2 respostas

5

Eu pré-processo os dados com XMLStarlet :

$ xml sel -t -c '/datas/data' -nl data.xml
<data>
  <name>Name1</name>
 </data><data>
  <name>Name2</name>
 </data>

Então, depende de como o script Python deseja ler esses dados. Espero que seja de um arquivo ou de uma entrada padrão ...

    
por 14.07.2016 / 17:36
5

Eu usaria o xslt.

a folha de estilo xslt é semelhante a esta

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/datas">
  <xsl:apply-templates select="data"/>
</xsl:template>

<xsl:template match="data">
  <data><name><xsl:value-of select="./name"/></name></data><xsl:text>&#xa;</xsl:text>
</xsl:template>

</xsl:stylesheet>

para a transformação use o programa xsltproc.

diga que seu arquivo de entrada é chamado in.xml

a folha de estilo xslt é nomeada in.xsl

a chamada é

 xsltproc in.xsl in.xml

saída:

<?xml version="1.0"?>
<data><name>Name1</name></data>
<data><name>Name2</name></data>
    
por 14.07.2016 / 17:15