Rob Dixon wrote:
>
> Rob Dixon wrote:
> >
> > If you have a fixed piece of HTML that you want to add then
> > you would still be better off coding it up using 'new_from_lol',
> > but if the content varies then you could package the lines
> > above as a subroutine:
> >
> >
> > sub html_element {
> >   my $html = shift;
> >   my $element = HTML::TreeBuilder->new_from_content($html);
> >   $element->look_down('_implicit', undef);
> > }
> >
> >
> > and then call it like this
> >
> >
> > my $r = $ele->postinsert(html_element($tag));
>
> Another point: this will work, but will result in a memory
> leak as HTML::Treebuilder objects aren't destroyed
> automatically when they go out of scope. This way is better:
>
>   sub html_element {
>     my $tree = HTML::TreeBuilder->new_from_content(shift);
>     my $element = $tree->look_down('_implicit', undef);
>     $element->detach;
>     $tree->delete;
>     $element;
>   }

I'll shut up after this post!

I've just been re-reading the POD for HTML::TreeBuilder, and note
there is a method 'disembowel' which does exactly what I've coded
above, which makes things a lot neater. It looks like this (but
don't forget that you still need to call $element->delete when
you're done with using the code fragment).

HTH,

Rob


#!perl
use strict;
use warnings;

use HTML::TreeBuilder;

my $insert= <<TEST;
<tr>
  <td>
    some more tags here
  </td>
</tr>
TEST

my $element = HTML::TreeBuilder->new_from_content($insert)->disembowel;

print $element->as_HTML;

**OUTPUT**

<tr><td> some more tags here </td></tr>





Reply via email to