我有一个很大的xml文件,正在逐行阅读。
<Role elemId="id35" island_id="0" role_name="Design" value="True"/>
<Role elemId="id34" island_id="0" role_name="Lead" value="False"/>
我需要做的是每当在字符串中看到role_name时都需要将其空白。
例如,这是我想要的输出。注意,role_name已被清空。
<Role elemId="id35" island_id="0" role_name="" value="True"/>
<Role elemId="id34" island_id="0" role_name="" value="False"/>
role_name可以具有任何数字或值的组合。所以我不能硬编码
这是我的工作代码:
#!/usr/bin/perl
use strict;
use warnings;
print "\nPerl Starting ... \n\n";
while (my $recordLine =<DATA>)
{
chomp($recordLine);
print "$recordLine ...\n";
if (index($recordLine, "role_name") != -1)
{
#Found role_name tag ... now blank it ... how?
$recordLine =~ s/role_name="Design"/role_name=""/g; #I need a generic reg experssion here
print "recordLine: $recordLine ...\n";
}
}
print "\nPerl End ... \n\n";
__DATA__
<Role elemId="id35" island_id="0" role_name="Design" value="True"/>
<Role elemId="id34" island_id="0" role_name="Lead" value="False"/>
答案 0 :(得分:1)
使用支持XML的工具来处理XML。逐行处理它可能会导致格式不正确的XML损坏。
在Perl中,您可以使用XML::LibXML。
if(test-path c:\temp\a.xml)
{
$a = import-clixml -Path c:\temp\a.xml
}
$a
1
还有xsh,这是我刚维护的XML :: LibXML的包装器。它是交互式的,而且不太冗长:
d3.select(this.$el).select('#brush');
.style('fill', '#569fd5')
.call(brush.on('end', brushended));
答案 1 :(得分:0)
这应该可以满足您的需求
$recordLine =~ s/role_name=".*?"/role_name=""/g;