gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 01:56:36 25 4
gpt4 key购买 nike

我正在编写一个简单的 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,它可以正确地删除元素并将后面的元素向下移动以填充空间。使用

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

而不是你的delete,你的代码应该适合你。

关于xml - Perl 和 XML::Smart - 如何从 XML 文件中删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14188644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com