使用perl XML :: Twig处理html嵌套列表元素

时间:2016-03-15 14:19:30

标签: xml perl xml-twig

我使用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

获取此输出

先谢谢。

1 个答案:

答案 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>