Modificar várias linhas de um arquivo XML usando a linha de comando

1

Olhando o texto abaixo, como faço para substituir várias linhas de texto?

<Model500>
ABC
BCD 
CDE
</Model500>
<Model500>
123
234
345
</Model500>

A saída poderia ser como abaixo

<Model500>
AAA
BBB 
CCC
</Model500>
<Model500>
111
333
555
</Model500>

Eu gostaria de realizar isso com sed , mas qualquer utilitário de linha de comando que funcione com o Bash funcionará. Devo estar usando um loop para conseguir isso?

    
por keyboard_solo 13.09.2016 / 22:35

1 resposta

9

Use uma ferramenta adequada , com shell, é uma boa ideia:

xmlstarlet edit -L -u "//Model500[1]"  -v "AAA                                                                
BBB
CCC" file.xml

xmlstarlet edit -L -u "//Model500[2]" -v "111                                                               
333
555" file.xml


cat file.xml

A expressão //Model500[2] é uma expressão Xpath

NOTA ¹

você precisa incluir seu xml com uma tag como:

<root>
...
</root>

para ser XML válido. Espero que você tenha cortado o arquivo XML para o propósito da sua pergunta.

NOTA ²

Você também pode usar , , etc ... e um lib xml adequado.

Em :

#!/usr/bin/perl

use strict;
use warnings;

use XML::Simple;

my $xml_file = 'file.xml';

my $xml = XMLin(
    $xml_file,
    KeepRoot => 1,
    ForceArray => 1,
);

$xml->{root}->[0]->{Model500}->[0] = "AAA\nBBB\nCCC\n";
$xml->{root}->[0]->{Model500}->[1] = "111\n222\n333\n";

XMLout(
    $xml,
    KeepRoot => 1,
    NoAttr => 1,
    OutputFile => $xml_file,
);
    
por 13.09.2016 / 22:56