使用Perl脚本将XML文件中的数字替换为字符串

k5hmc34c  于 2022-11-15  发布在  Perl
关注(0)|答案(2)|浏览(248)

我有一个XML文件。我需要将comment=“18”中的数字替换为comment=“my string”,其中字符串来自我的@数组($array[18] = my string)。

<rule ccType="inst" comment="18" domain="icc" entityName="thens"  entityType="toggle" excTime="1605163966" name="exclude" reviewer="hpanjali" user="1" vscope="default"></rule>

这就是我所尝试的。

while (my $line = <FH>) {
      chomp $line;
      $line =~ s/comment="(\d+)"/comment="$values[$1]"/ig;
      #print "$line \n";
      print FH1 $line, "\n";
}
3ks5zfa0

3ks5zfa01#

以下是使用XML::LibXML的示例:

use strict;
use warnings;
use XML::LibXML;

my $fn = 'test.xml';
my @array = map { "string$_" } 0..20;
my $doc = XML::LibXML->load_xml(location => $fn);
for my $node ($doc->findnodes('//rule')) {
    my $idx = $node->getAttribute('comment');
    $node->setAttribute('comment', $array[$idx]);
}
print $doc->toString();
sr4lhrrt

sr4lhrrt2#

这里有一个XML::Twig的例子,它的基本思想和XML::LibXML example是一样的,但是用不同的工具以不同的方式完成:

use XML::Twig;

my $xml =
qq(<rule ccType="inst" comment="18"></rule>);

my @array;
$array[18] = 'my string';

my $twig = XML::Twig->new(
    twig_handlers => {
        rule => \&update_comment,
        },
    );
$twig->parse( $xml );
$twig->print;

sub update_comment {
    my( $t, $e ) = @_;
    my $n = $e->{att}{comment};
    $e->set_att( comment => $array[$n] );
    }

相关问题