加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl和XML :: Smart – 如何从XML文件中删除节点

发布时间:2020-12-16 06:25:19 所属栏目:大数据 来源:网络整理
导读:我正在编写一个简单的Perl脚本,它使用 XML :: Smart来创建和解析XML文件.我遇到了删除XML节点的问题.我有以下代码: if ( exists $XML-{object}[$n] ) { delete $XML-{object}[$n] ;};$XML-save('dane.xml') ; 它做了预期的事情 – 即删除了正确的节点.但是,
我正在编写一个简单的Perl脚本,它使用 XML :: Smart来创建和解析XML文件.我遇到了删除XML节点的问题.我有以下代码:

if ( exists $XML->{object}[$n] ) {
    delete $XML->{object}[$n] ;
};
$XML->save('dane.xml') ;

它做了预期的事情 – 即删除了正确的节点.但是,当我稍后尝试列出所有节点(特定根的子节点)时,使用下面的代码(通常可以工作):

my @objects = $XML->{object}('@') ;
foreach my $object (@objects) {
    say "$object->{address}";
};

Perl列出所有节点,直到删除之前的节点,然后吐出以下错误:

Not a HASH reference at g:/Dwimperl/perl/site/lib/XML/Smart/Tie.pm line 48,<STDIN> line 2.

我很难过 – 我尝试使用$XML-> data()的各种排列方式;但都没有用.我更愿意继续使用XML :: Smart来完成这项任务,所以我希望这个问题可以在这个特定的库中解决.

解决方法

虽然XML :: Smart比它所基于的XML :: Simple更好,但在我看来,它仍然不是很擅长表示XML数据.在这种情况下,您必须知道要删除的节点是Perl数组的元素,并且在其上使用delete将简单地将元素设置为undef,同时将其保留在原位(除非它恰好是最后一个元素)数组).

要操纵这样的数组,你需要拼接,它可以正确地移除元素并向后移动元素以填充空间.使用

splice @{ $XML->{object} },$n,1

而不是你的删除,你的代码应该适合你.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读