Você ainda não deu um XML grande o suficiente, então estou adivinhando um pouco.
Eu sugeriria que a ferramenta para o trabalho é um parser XML decente e perl.
Eu sugiro strongmente que você NÃO use:
Porque ambos são frágeis - eles funcionam mais ou menos, em circunstâncias controladas, mas você tem um código hacky desagradável que pode ser misteriosamente quebrado um dia.
Em vez disso - use um analisador que suporte xpath
, que é - em termos XML - uma maneira de localizar / selecionar o conteúdo desejado e modificá-lo.
Algo como XML::Twig
é uma barreira baixa à entrada. (XML :: LibXML também é uma alternativa sólida, mas mais exaustiva).
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Twig;
#parse the content - you probably want 'parsefile' here instead.
my $twig = XML::Twig -> new ( pretty_print => 'indented_a' ) -> parse ( \*DATA );
#select the node you want, alter it.
$twig -> get_xpath('./ssh/enabled',0) -> set_text('false');
#print the output (to STDOUT) - you can print {$output_fh} $twig->sprint; instead
$twig -> print;
__DATA__
<xml>
<www>
<enabled>true</enabled>
<ip>0.0.0.0</ip>
<port>80</port>
</www>
<ssh>
<enabled>true</enabled>
<ip>0.0.0.0</ip>
<port>2024</port>
</ssh>
<smtp>
<enabled>true</enabled>
<ip>0.0.0.0</ip>
<port>25</port>
</smtp>
</xml>
Nota - get_xpath
usa um tipo de formato de 'estrutura de diretórios'. Ele suporta caminhos absolutos dentro do XML, bem como caminhos relativos. A maneira como é executado acima, ele irá operar no primeiro elemento que corresponde a esse caminho (XML permite múltiplos).
Você pode, no entanto, fazer isso em um loop 'foreach':
foreach my $thing ( $twig -> get_xpath ('//enabled') ) {
$thing -> set_text('false');
}
para desativar tudo.
xpath
é bastante flexível - é uma maneira de especificar caminho, elemento e atributos e é ideal para navegar XML de maneira semelhante à expressão regular.
Então você tem construções como //
para encontrar recursivamente.
Ou //node[@name='test']
para encontrar:
<node name="test">content</node>
Há uma referência rápida e prática que oferece uma maneira fácil de ver como navegar pelo XML usando o xpath.