Data::Grove::Visitor(3User Contributed Perl DocumentatiData::Grove::Visitor(3)

       Data::Grove::Visitor - add visitor/callback methods to Data::Grove

        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 meth-
       ods (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 con-
       tents 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 haven't been implemented yet:

       o   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_ele-
           ment"').  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,

       perl(1), Data::Grove

       Extensible Markup Language (XML) <>

perl v5.8.6                       2003-10-21           Data::Grove::Visitor(3)