Wenn Sie absolut sicher sind, dass das Format von Ihrem XML wird sich nie ändern, dass die Reihenfolge der Attribute festgelegt ist, dass Sie tatsächlich die Regexp für die Zahl richtig bekommen können ... dann gehen Sie für die Nicht-Parser-basierte Lösung.
Persönlich würde ich XML :: Twig verwenden (vielleicht weil ich es geschrieben habe; -). Es verarbeitet das XML als XML, wobei das ursprüngliche Format der Datei berücksichtigt wird. Es wird nicht vollständig in den Arbeitsspeicher geladen, bevor mit der Arbeit begonnen wird.
Ungeprüfte Code unten:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
XML::Twig->new(# call the sub for each VALUE element with a DECIMAL_VALUE attribute
twig_roots => { 'VALUE[@DECIMAL_VALUE]' => \&upd_decimal },
# print anything else as is
twig_print_outside_roots => 1,
)
->parsefile_inplace('foo.xml');
sub upd_decimal
{ my($twig, $value)= @_; # twig is the XML::Twig object, $value the element
my $decimal_value= $value->att('DECIMAL_VALUE');
$decimal_value += 0.4;
$value->set_att(DECIMAL_VALUE => $decimal_value);
$value->print;
}
Ich denke du meinst "($ 2 + 0,4)" nicht "(2 $ * 0,4)". –
Ja, dumm mich. Ich werde das sofort beheben. – PEZ