Yup. Yer using poorly documented OSS software ;)
The SYNOPSIS is badly outdated; I've updated it. The SYNOPSIS in the released version dates from before I made X::F::D more compliant with XPath. The updated SYNOPSIS looks like:
use XML::Filter::Dispatcher qw( :all ); my $f = XML::Filter::Dispatcher->new( Rules => [ 'foo' => \&handle_foo_start_tag, '@bar' => \&handle_bar_attr, ## Send any <foo> elts and their contents to $handler 'snarf//self::node()' => $handler, ## Print the text of all <description> elements 'description' => [ 'string()' => sub { push @out, xvalue } ], ], Vars => { "id" => [ string => "12a" ], }, );
The change that affects you is that string() now only looks at the first node in the nodeset as per XPath, so you need to get X::F::D to visit all the desired element nodes and then call string() nodes.
There's now a t/synopsis.t that has the audacity to test the code from the SYNOPSIS. The next release will be heading CPANward as soon as I submit this.
Thanks for the bug report.
- Barrie
P.S. I only found this question thanks to Matt Sergeant mentioning it. In general, while perlmonks is a nice resource, I recommend posting XML related questions to the perl-xml@listserv.ActiveState.com mailing list.
In reply to Re: XML::Filter::Dispatcher string rules problem
by barries
in thread XML::Filter::Dispatcher string rules problem
by toma
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |