Greetings, PerlMonks.
I have run into a puzzle with XML::Twig where I am looking for specific elements and then need to find the text adjacent to those elements. The code snippet below illustrates the puzzle with one such sought after element and adjacent text in its __DATA__ section.
#!/usr/bin/perl
use XML::Twig;
use strict;
use warnings;
my $xml = XML::Twig->new(
twig_handlers => { 'text:bookmark' => \&handler_bookmark } );
$xml->parse(\*DATA);
print qq(\n\n);
$xml->print;
exit(0);
sub handler_bookmark {
my ($twig, $bookmark)= @_;
$bookmark->parent->print;
}
__DATA__
<?xml version="1.0" encoding="UTF-8"?>
<text:h text:style-name="P900" text:outline-level="3">
<text:bookmark text:name="_asdfqwerzxcv"/>Foo bar
</text:h>
The two output items should be identical but are not. Specifically the string "Foo bar" is missing from the first output which has its origin in the handler_bookmark handler subroutine. I would expect that ->parent would still contain the text it started with, but it does not. Using ->parent->text does not retrieve the string either. Nor does using ->parent_text find it either.
What can be done using XML::Twig to find the text "next to" an element?