我使用perl XML :: Twig处理html列表。
list元素具有另一个嵌套列表元素,如
<list list-type="bullet">
<list-item>
<p>Linea</p>
<list list-type="bullet">
<list-item>
<p>Uno</p>
</list-item>
<list-item>
<p>vitara</p>
</list-item>
</list>
</list-item>
<list-item>
<p>Panda</p>
</list-item>
</list>
输出应为
<p>* Linea</p>
<p>** Uno</p>
<p>** vitara</p>
<p>* Panda</p>
任何人都可以帮我在这里使用XML :: Twig
获取此输出先谢谢。
答案 0 :(得分:6)
您可以在标量上下文中使用ancestors( 'list')
来获取封闭列表的数量(它返回列表中元素的数量)。使用此值可以使用正确数量的&#39; *&#39;:
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Twig;
XML::Twig->new( twig_handlers => {
'list-item/p' => sub { my $level= $_->ancestors( 'list');
$_->prefix( '*' x $level . ' ');
$_->print;
print "\n";
}
}
)
->parse( \*DATA);
__DATA__
<list list-type="bullet">
<list-item>
<p>Linea</p>
<list list-type="bullet">
<list-item>
<p>Uno</p>
</list-item>
<list-item>
<p>vitara</p>
</list-item>
</list>
</list-item>
<list-item>
<p>Panda</p>
</list-item>
</list>