我想清除位於目錄樹中的XML文件中的<loot>
</loot>
元素內的整個內容。我正在使用Windows的64位的草莓Perl。使用草莓Perl和樹枝清除Windows上目錄樹中所有文件的xml括號中的內容
例如這個XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<monster name="Dragon"/>
<health="10000"/>
<immunities>
<immunity fire="1"/>
</immunities>
<loot>
<item id="1"/>
<item id="3"/>
<inside>
<item id="6"/>
</inside>
</item>
</loot>
更改後的文件應該是:
<?xml version="1.0" encoding="UTF-8"?>
<monster name="Dragon"/>
<health="10000"/>
<immunities>
<immunity fire="1"/>
</immunities>
<loot>
</loot>
我有這樣的代碼:
#!/usr/bin/perl
use warnings;
use strict;
use File::Find::Rule;
use XML::Twig;
sub delete_loot {
my ($twig, $loot) = @_;
foreach my $loot_entry ($loot -> children) {
$loot_entry -> delete;
}
$twig -> flush;
}
my $twig = XML::Twig -> new (pretty_print => 'indented',
twig_handlers => { 'loot' => \&delete_loot });
foreach my $file (File::Find::Rule -> file()
-> name ('*.xml')
-> in ('C:\Users\PIO\Documents\serv\monsters')) {
print "Processing $file\n";
$twig -> parsefile_inplace($file);
}
但它正確地編輯只有第一個文件它符合,其餘文件保持清晰(0 kb清除文件)
你可以添加其他文件中,這樣的沒有解決這個問題嗎?你可以[編輯]這個問題。 – simbabque
所有文件都是正確的,但是腳本只在第一個符合的時候才能正常工作,剩下的部分清空了(無論它編輯了哪個xml文件,它只能正確編輯第一個文件) – Piodo
明顯的測試將會 - 循環內有'my $ twig'聲明。 – Sobrique