我在我正在处理的元素之前有评论,并想用新评论替换它们。
我可以使用添加新评论insert_new_elt(before ...)
,但找不到获取旧评论并替换它的方法。
#!/usr/bin/perl
use common::sense;
use XML::Twig;
my $twig = XML::Twig->new(
twig_roots => { 'el' => sub { process_el(@_) } },
comments => "process",
pretty_print => "indented_c",
twig_print_outside_roots => 1,
);
$twig->parse(join('', <DATA>)) or die "Could not parse\n";
$twig->flush();
sub process_el {
my( $t, $e)= @_;
my $text = $e->text;
# replace old comment before this element ?
$e->insert_new_elt( before => '#COMMENT', "new comment on $text");
$e->flush();
}
__DATA__
<?xml version="1.0" encoding="utf-8"?>
<root>
<!-- old comment 1 -->
<el>element 1</el>
<el>element 2 without comment before</el>
<!-- old comment 3 -->
<el>element 3</el>
</root>
(我还需要检测元素之前是否真的有注释。如果没有,我显然无法替换它)
我试过prev_sibling
了,但这给了我之前的元素,而不是中间的评论。
上面的代码可以插入新的注释,但保留旧的注释,这是我不想要的。