Data::Grove::Visitor - add visitor/callback methods to Data::Grove objects
| Use Case | Command | Description |
|---|---|---|
| Visit an object and invoke callback | $object->accept($visitor) | π‘ Calls visit_OBJECT on the visitor for the visited object type |
| Visit an element by tag name | $object->accept_name($visitor) | π‘ Calls visit_name_NAME on element objects; behaves like accept for others |
| Recurse into children | $object->children_accept($visitor) | π‘ Calls accept on each child of the element |
| Recurse into children by name | $object->children_accept_name($visitor) | π‘ Calls accept_name on each child |
| Visit attributes | $object->attr_accept($visitor, $attr_name) | π‘ Calls accept on each object in the named attribute |
use Data::Grove::Visitor;
@results = $object->accept ($visitor, ...);
@results = $object->accept_name ($visitor, ...);
@results = $object->children_accept ($visitor, ...);
@results = $object->children_accept_name ($visitor, ...);
Data::Grove::Visitor adds visitor methods (callbacks) to Data::Grove objects. A βvisitorβ is a class (a package) you write that has methods (subs) corresponding to the objects in the classes being visited. You use the visitor methods by creating an instance of your visitor class, and then calling accept($my_visitor) on the top-most object you want to visit, that object will in turn call your visitor back with visit_OBJECT, where OBJECT is the type of object.
There are several forms of accept. Simply calling accept calls your package back using the object type of the object you are visiting. Calling accept_name on an element object calls you back with visit_name_NAME where NAME is the tag name of the element, on all other objects it's as if you called accept.
All of the forms of accept return a concatenated list of the result of all visit methods.
children_accept calls accept on each of the children of the element. This is generally used in element callbacks to recurse down into the element's children, you don't need to get the element's contents and call accept on each item. children_accept_name does the same but calling accept_name on each of the children. attr_accept calls accept on each of the objects in the named attribute.
Refer to the documentation of the classes you are visiting (XML::Grove, etc.) for the type names (element, document, etc.) of the objects it implements.
The hash keys Contents and Name are used to indicate objects with children (for children_accept) and named objects (for accept_name).
These are random ideas that haven't been implemented yet:
visit_SGML_Element) instead of a generic name (visit_element). The idea here would be to try calling visit_PACKAGE with the most specific class first, then try superclasses, and lastly to try the generic.Ken MacLeod, ken AT bitsko.us
Extensible Markup Language (XML) <http://www.w3c.org/XML>
perl v5.32.0 2020-12-28 Data::Grove::Visitor(3pm)
Generated by phpman v4.10.0-7-g98e9fd5 · Markdown · JSON · MCP Author: Che Dong Under GNU General Public License
2026-09-12 07:18 @2600:1f28:365:80b0:6f72:a904:73b0:e266
CrawledBy CCBot/2.0 (https://commoncrawl.org/faq/)