Aktualisieren des XML-Attributwerts basierend auf einem anderen mit Perl
Dies ist meine XML-Beispieldatei
<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>
In diesem Fall muss ich den Revisionswert nur dann aktualisieren, wenn<path>
enthält den String "opensource".
Ich habe viel gesucht, konnte aber nichts Nützliches finden, um dies zu erreichen. Ich könnte den Wert basierend auf der Position wie folgt ändern. Kann mir jemand helfen, dies zu aktualisieren? Oder lassen Sie mich wissen, ob es dafür eine bessere Perl-Bibliothek gibt.
#!/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,
);