这是情景。
<Student_Detail>
<Name> Alexander Stephen </Name>
<Employee_id> 234567 </Employee_id>
</Student_Detail>
<Student_Detail>
<Name> Geet Sethi </Name>
<Employee_id> 264577 </Employee_id>
</Student_Detail>
考虑以上是XML文件的一部分。我的工作是根据名称更改员工ID。
对Alexander Stephen说,新的员工ID应该是264785。
我需要通过PERL进行上述更改。但问题是它相对较新。
我的尝试是识别标签,将其存储在一个数组中,然后根据名称标签发布新的员工ID。有人可以帮助我一个初创的想法,以便我可以更好地加快代码。
答案 0 :(得分:1)
使用XML :: Twig的解决方案:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
# a hash name => new_id
my %new_id= ( 'Alexander Stephen' => '264785'
);
my $t= XML::Twig->new( twig_handlers => { Student_Detail => \&student },
keep_spaces => 1,
)
->parse( \*DATA); # or parsefile( 'my_file') in the real code
# called any time a Student_Detail element has been completely parsed
sub student
{ my( $t, $student)= @_;
# use trimmed_field to get rid of extra spaces
my $name= $student->trimmed_field( 'Name');
if( my $new_id= $new_id{$name})
{ $student->first_child( 'Employee_id')->set_text( $new_id); }
$t->flush; # outputs the XML so far
}
__DATA__
<Students>
<Student_Detail>
<Name> Alexander Stephen </Name>
<Employee_id> 234567 </Employee_id>
</Student_Detail>
<Student_Detail>
<Name> Geet Sethi </Name>
<Employee_id> 264577 </Employee_id>
</Student_Detail>
</Students>
这会将输出打印到STDOUT。您可以将其重定向到特定文件,或者如果要更新文件,请使用parsefile_inplace
。
您的XML有点奇怪,名称和ID周围的空格可能会产生问题。你确定它们存在于真实数据中吗?