in reply to Re: XML::Twig generating invalid XHTML output??
in thread XML::Twig generating invalid XHTML output??

Thanks very much for such a quick response. That seemed to do the trick for me as well. Any ideas why? What changes triggering an empty subrouting to be called for the html tags?

- Nick
  • Comment on Re^2: XML::Twig generating invalid XHTML output??

Replies are listed 'Best First'.
Re^3: XML::Twig generating invalid XHTML output??
by ikegami (Patriarch) on Feb 14, 2005 at 17:55 UTC

    Could it be that you're suppose to use twig_handlers instead of twig_roots, since you don't want body to become a root node? The example from the module's documentation is: (irrelevant details omitted)

    my $twig=XML::Twig->new( twig_handlers => { title => sub { $_->set_gi('h2') }, # Change title tags to h2. para => sub { $_->set_gi('p') }, # Change para to p. hidden => sub { $_->delete; }, # Remove hidden elements. list => \&my_list_process, # Process list elements. }, pretty_print => 'indented', # Output will be nicely formatted. );
      Looks like that works too! Hmmm. I've read places which suggest using handlers, and others that suggest roots, wonder why/which is better?
      - Nick
        The difference appears to be what they generate. root is good if you want to extract portions of an XML doc (because it skips the stuff outside the roots), whereas handlers appear to be the way to go to transform an XML doc. At least, that's what I deduced, having no experience with XML::Twig before now.
Re^3: XML::Twig generating invalid XHTML output??
by Tanktalus (Canon) on Feb 14, 2005 at 17:38 UTC

    The answer to your question of "why" depends on how deep of an answer you're looking for.

    On the deepest level, I'm not even going to pretend to look at the XML::Twig code (or any of the miriad of levels of code under it). So, no, no ideas why from that level.

    From a higher, XML::Twig-is-a-black-box level, how I got this answer was from playing with the code. First thing I did was comment out the twig_print_outside_roots => 1, line. That showed me the reason why you put it in in the first place: all of a sudden, everything outside of the body tag stopped being printed. That gave me the idea to try adding a new root such that everything would be in it - then you don't have anything outside of the roots (so that line is no longer really needed... I think). Since 'html' is the root of everything, I figured it would be the appropriate root to use. At this point, the question is: what do we want to do with that root. The answer is simple: nothing. And that's what I told perl: do nothing.

    Does that help answer the question?

      Sure did! Thanks again!
      - Nick