#!/usr/bin/perl
use HTML::TreeBuilder::XPath;
use HTML::Element;
use HTML::Entities qw(decode_entities);
use Data::Dumper;
use strict;
use warnings;
my $html = &layer(3);
print $html->as_XML,"\n";
exit(0);
sub layer {
my ($layer) = (@_);
my $ul = HTML::Element->new('ul');
my $li = HTML::Element->new('li');
$li->push_content("Layer $layer");
$ul->push_content($li);
if($layer--) {
my $h = &layer($layer);
my @c = &unescape_entities($h); # offending line
print "Wrong structure:\n",Dumper(@c),"\n ----\n";
exit(1);
$ul->push_content($h);
} else {
my $foo = ' foo < bar';
my $literal = HTML::Element->new('~literal', text=>$foo);
$li->push_content($literal);
$ul->push_content($li);
}
return($ul);
}
sub unescape_entities {
my ($html) = (@_);
my $tmp = HTML::TreeBuilder::XPath->new;
$tmp->parse(decode_entities($html->as_XML));
my @c = $tmp->findnodes('//body/*');
print "Right structure:\n", Dumper(@c),"\n ----\n";
$tmp->delete;
return(@c); # this is getting transformed
}