gpt4 book ai didi

XML::Twig 更改已删除

转载 作者:行者123 更新时间:2023-12-02 22:23:55 25 4
gpt4 key购买 nike

下面的程序给出了我无法解释的奇怪输出:

use strict;
use warnings;
use XML::Twig;

my $xml =
q{<block>
<foo>bar baz</foo>
</block>};

my $twig = XML::Twig->new(
TwigHandlers => {foo => \&foo, block => \&block},
);

print "after parse: " . $twig->parse($xml)->sprint;


sub foo {
my ( $twig, $foo ) = @_;

my $text = $foo->sprint("don't print outside element");
my $newSummary = XML::Twig::Elt->parse( '<p><i>' . $text . '</i></p>' );
$newSummary->paste( 'before', $foo);
my $parent = $foo->parent;
# $foo->delete;
print "foo: " . $parent->sprint . "\n\n";
}

sub block {
my ($twig, $block) = @_;
print "block: " . $block->sprint . "\n\n";
}

打印如下:

foo: <block><p><i>bar baz</i></p><foo>bar baz</foo></block>

block: <block><p><i>bar baz</i></p><foo>bar baz</foo></block>

after parse: <block><foo>bar baz</foo></block>

所以我正在修改 foo 处理程序内部的 Twig ,更改会一直存在以供 block 处理程序看到它,但是当处理全部完成时,变化消失了。这里发生了什么?我怎样才能让我的零钱在 Twig 的整个生命周期内保持不变?

最佳答案

它看起来像是一个错误,或者至少是范围界定的问题:新元素似乎在解析完成时被垃圾回收。

避免这种情况的一种方法是在元素的创建中添加一个copy:

my $newSummary = XML::Twig::Elt->parse( '<p><i>' . $text . '</i></p>' )->copy;

关于XML::Twig 更改已删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13263193/

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