http://qs321.pair.com?node_id=751778

eff_i_g has asked for the wisdom of the Perl Monks concerning the following question:

Monks,

Given the s[ai]mple XML file:
<root> <element>One<?xpp qa?>Two</element> </root>
I want to wrap "Two" in <?xpp bold?> and <?xpp /bold?>.

My approach is to create a twig_root of element, loop through its children, find "Two", then add the PIs.

The trouble is that I'm getting one child ("One<?xpp qa?>Two"), when I think I should be getting three ("One", "<?xpp qa?>", "Two"). Alas, the PI is being lumped in with the PCDATA.

Sure, I could parse the PI out of the PCDATA, but that doesn't seem right. Perhaps I've a misunderstanding, a bug, or have overlooked something in the XML::Twig docs?

Insights are appreciated.

P.S. The test code:
use strict; use warnings; use XML::Twig; my $XML = XML::Twig->new( twig_roots => { 'element' => sub { for my $child ($_->cut_children()) { $child->print(); print "\n"; } } }, pretty_print => 'indented' ); $XML->parse(*DATA); print "\n"; __DATA__ <root> <element>One<?xpp qa?>Two</element> </root>