.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .if !\nF .nr F 0 .if \nF>0 \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} .\} .\" ======================================================================== .\" .IX Title "XML::Grove::Sub 3pm" .TH XML::Grove::Sub 3pm "2018-07-12" "perl v5.26.2" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" XML::Grove::Sub \- run a filter sub over a grove .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 1 \& use XML::Grove::Sub; \& \& # Using filter method on XML::Grove::Document or XML::Grove::Element: \& @results = $grove_object\->filter(\e&sub [, ...]); \& \& # Using an XML::Grove::Sub instance: \& $filterer = XML::Grove::Sub\->new(); \& @results = $grove_object\->accept($filterer, \e&sub [, ...]); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\f(CW\*(C`XML::Grove::Sub\*(C'\fR executes a sub, the filter, over all objects in a grove and returns a list of all the return values from the sub. The sub is called with the grove object as it's first parameter and passing the rest of the arguments to the call to `\f(CW\*(C`filter()\*(C'\fR' or `\f(CW\*(C`accept()\*(C'\fR'. .SH "EXAMPLE" .IX Header "EXAMPLE" The following filter will return a list of all `\f(CW\*(C`foo\*(C'\fR' or `\f(CW\*(C`bar\*(C'\fR' elements with an attribute `\f(CW\*(C`widget\-no\*(C'\fR' beginning with `\f(CW\*(C`A\*(C'\fR' or `\f(CW\*(C`B\*(C'\fR'. .PP .Vb 2 \& @results = $grove_obj\->filter(sub { \& my $obj = shift; \& \& if ($obj\->isa(\*(AqXML::Grove::Element\*(Aq) \& && (($obj\->{Name} eq \*(Aqfoo\*(Aq) \& || ($obj\->{Name} eq \*(Aqbar\*(Aq)) \& && ($obj\->{Attributes}{\*(Aqwidget\-no\*(Aq} =~ /^[AB]/)) { \& return ($obj); \& } \& return (); \& }); .Ve .SH "AUTHOR" .IX Header "AUTHOR" Ken MacLeod, ken@bitsko.slc.ut.us .SH "SEE ALSO" .IX Header "SEE ALSO" \&\fIperl\fR\|(1), \fIXML::Grove\fR\|(3), \fIData::Grove::Visitor\fR\|(3) .PP Extensible Markup Language (\s-1XML\s0)