我有一个很长的xml文件,其中包含许多次字符串
<div type="something">
我只需要在文字“id =”NUMBER“中添加这些字符串 其中NUMBER是一个从1开始并递增1的值。 我的输出应该是
<div id="1" type="something">
<div id="2" type="something">
<div id="3" type="something">
...
我最好使用Perl;有谁可以帮助我?
谢谢你, 斯特凡
我试过了:
use strict;
use warnings;
my $str = "<div id=\"";
my $i = 0;
$str =~ s/<div id=\"/'<div id="'.++$i/ eg;
print "$str";
答案 0 :(得分:5)
带有XML文件的正则表达式类似于使用瑞士军刀的心脏直视手术。 Just because you can doesn't mean you should。
由于有大量专用的XML解析器可供选择,为什么不使用它呢?以下是使用XML::LibXML
:
use strict;
use warnings;
use XML::LibXML;
my $xml = XML::LibXML->new->parse_file( 'file.xml' );
my @wanted_nodes = $xml->findnodes( '//div[@type="something"]' );
my $counter = 1;
for my $div ( @wanted_nodes ) {
$div->setAttribute( 'id', $counter++ );
}
$xml->toFile( 'new_file.xml' );