Manual Reference Pages - DATA::GROVE::VISITOR (3)
Data::Grove::Visitor - add visitor/callback methods to Data::Grove objects
@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
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 its 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 elements children, you dont need to get the elements
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
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
These are random ideas that havent been implemented yet:
Several objects fall into subclasses, or you may want to be able to
subclass a visited object and still be able to tell the difference.
In SGML::Grove I had used the package name in the callback
(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, email@example.com
Extensible Markup Language (XML) <http://www.w3c.org/XML>
|perl v5.20.3 ||DATA::GROVE::VISITOR (3) ||2003-10-21 |
Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.