Atualizando o valor do atributo xml com base em outro com Perl
Este é o meu arquivo xml de amostra
<manifest>
<default>
<remote>remote1</remote>
<revision>rev1</revision>
</default>
<project>
<name>common</name>
<path>opensource/device</path>
<revision>sa</revision>
<x-ship>oss</x-ship>
</project>
<project>
<name>external</name>
<path>source/tp</path>
<x-ship>none</x-ship>
</project>
<project>
<name>ws</name>
<path>opensource/ws</path>
<remote>nj</remote>
<revision>myno</revision>
<x-ship>none</x-ship>
</project>
</manifest>
Neste preciso atualizar o valor da revisão somente quando<path>
possui uma string "opensource".
Eu pesquisei bastante, mas não encontrei nada útil para conseguir isso. Poderia modificar o valor com base na posição abaixo. Alguém pode me ajudar a atualizar isso? Ou deixe-me saber se existe uma biblioteca Perl melhor para fazer isso.
#!/usr/bin/perl
use strict;
use warnings;
use XML::Simple;
my $xml_file = 'dev.xml';
my $xml = XMLin(
$xml_file,
KeepRoot => 1,
ForceArray => 1,
);
$xml->{manifest}->[0]->{project}->[2]->{revision} = 'kyo';
XMLout(
$xml,
KeepRoot => 1,
NoAttr => 1,
OutputFile => $xml_file,
);