使用Strawberry Perl和twig清除Windows上目录树中所有文件的xml括号中的内容

使用Strawberry Perl和twig清除Windows上目录树中所有文件的xml括号中的内容,第1张

概述我想清除放在< loot>内的整个内容< /赃物>目录树中 XML文件中的元素.我正在使用Strawberry Perl for Windows 64 bit. 例如,这个XML文件: <?xml version="1.0" encoding="UTF-8"?><monster name="Dragon"/><health="10000"/><immunities> <immunity 我想清除放在< loot>内的整个内容< /赃物>目录树中 XML文件中的元素.我正在使用StrawBerry Perl for Windows 64 bit.

例如,这个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/perluse 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清除文件)

解决方法 XML::Twig doc说“多枝没有得到很好的支持”.

如果您查看twig对象的状态(例如,使用Data :: Dumper),您会看到第一次和后续运行之间存在很大差异.看起来它认为已经完全冲洗了(这是真的,因为在第一次运行期间有完全冲洗).它可能没有什么可以打印后续文件,文件最终为空.

在每个循环中重新创建树枝对象对我有用:

#!/usr/bin/perluse 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;    }}foreach my $file ( file::Find::Rule  -> file()                                     -> name ( '*.xml' )                                     -> in ( '/home/dabi/tmp' ) ) {    print "Processing $file\n";    my $twig = XML::Twig -> new ( pretty_print => 'indented',twig_handlers => { loot => \&delete_loot,} );     $twig -> parsefile($file);     $twig -> print_to_file($file);}

此外,我不得不更改XML文件结构以使其处理:

<?xml version="1.0" enCoding="UTF-8"?><monster name="Dragon"><health value="10000"/><immunitIEs>   <immunity fire="1"/></immunitIEs><loot><item ID="1"/>  <item ID="3">      <insIDe>        <item ID="6"/>      </insIDe>  </item></loot></monster>
总结

以上是内存溢出为你收集整理的使用Strawberry Perl和twig清除Windows上目录树中所有文件的xml括号中的内容全部内容,希望文章能够帮你解决使用Strawberry Perl和twig清除Windows上目录树中所有文件的xml括号中的内容所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1253091.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存