Comparando e removendo tags de arquivo XML

1. Comparando e removendo tags de arquivo XML

Mauricio Rezende
bracim

(usa Debian)

Enviado em 15/02/2012 - 09:56h

Prezados, boa tarde.

Estou com um problema que não consigo resolver.
Possuo dois arquivos XML, sendo que o primeiro possui algumas tags (e sub-tags assossiadas a mesma) e o segundo apenas com as tags (e sub-tags) que pretendo remover do primeiro arquivo XML.
Ex:

Arquivo 1:
-------------------------------------------------------------
<item type="1" key="sysDescr.0" value_type="1">
<description>sysDescr.0</description>
<delay>60</delay>
<history>7</history>
</item>

<item type="1" key="137.138" value_type="0">
<description>137.138</description>
<delay>60</delay>
<history>7</history>
</item>
-------------------------------------------------------------
#
#
#

Arquivo 2:
-------------------------------------------------------------
<item type="1" key="137.138" value_type="0">
<description>137.138</description>
<delay>60</delay>
<history>7</history>
</item>
-------------------------------------------------------------

Percebam que existem tags com valores semelhantes em ambos os arquivos (<delay>60</delay>), porém o que diferencia é a tag pai (item type="1" key="...).
Como fazer essa comparação no intuito de remover as informações do arquivo 2 do arquivo 1?
Se alguém puder me dar uma dica, fico grato!

Att,

Bracim




  


2. Re: Comparando e removendo tags de arquivo XML

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 15/02/2012 - 12:08h

Neste caso a saída do arquivo seria:

<item type="1" key="sysDescr.0" value_type="1">
<description>sysDescr.0</description>
<delay>60</delay>
<history>7</history>
</item>

??


3. Re: Comparando e removendo tags de arquivo XML

Mauricio Rezende
bracim

(usa Debian)

Enviado em 15/02/2012 - 12:10h

Exatamente!!


4. Re: Comparando e removendo tags de arquivo XML

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 15/02/2012 - 12:22h

Já tentou utitlizar o diff?

$ diff file1 file2

Se o arquivo possuir mais linhas, creio que a melhor solução seria bolar um script.

Se o diff não resolver, poste os seus arquivos para analisarmos.




5. Re: Comparando e removendo tags de arquivo XML

Mauricio Rezende
bracim

(usa Debian)

Enviado em 15/02/2012 - 13:48h

Já tentei usar o diff, porém ele desorganiza o XML e adiciona sinal de < e > na saída do comando: diff arquivo1 arquivo2 > saida.txt

Segue a saída abaixo:

saida.txt
--------------------------------
1,6d0
< <item type="1" key="sysDescr.0" value_type="1">
< <description>sysDescr.0</description>
< <delay>60</delay>
< <history>7</history>
< </item>
<

Como pretendo usar um script para automatizar tarefa no servidor, gostaria que o script gerasse o XML corretamente.




6. Re: Comparando e removendo tags de arquivo XML

Alexandre Gonçalves Monteiro da Silva
alexandregms

(usa Ubuntu)

Enviado em 15/02/2012 - 15:06h

Vc poderia retirar o < do início da linha. Veja um exemplo:

diff file file2 | sed 's/^< //g'


7. Re: Comparando e removendo tags de arquivo XML

Mauricio Rezende
bracim

(usa Debian)

Enviado em 15/02/2012 - 15:28h

Na verdade, a saida do diff gera também uma linha extra informando o número da linha do arquivo1 com diferença (1,6d0) em relação ao arquivo2.
Esse XML que postei aqui é apenas um exemplo para facilitar a explicação. Ou seja, o XML original possui várias tags e, portanto, essas linhas com as diferenças não seguem um padrão para trata-las.

O ideal era comparar o contéudo do arquivo1 com o conteúdo do arquivo2 e remover todas as tags (e sub tagas associadas a tag pai) do arquivo1.




8. Re: Comparando e removendo tags de arquivo XML

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 15/02/2012 - 17:33h

tenta assim ... tá esquisito, mas acho que quebra seu galho






egrep ^'<item type="' arquivo2 | while read line
do
campos=`egrep -n '<item type="|</item>' arquivo1 | cut -d: -f1 | xargs`
indice=`grep -n "$line" arquivo1 | cut -d: -f1`
delete=`echo "$campos" | xargs -n2 | grep ^"$indice" | sed 's/ /,/'`
sed -i "$delete d" arquivo1
done






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts