[XML-SIG] New to Python OO
Fri, 11 Dec 1998 17:59:06 -0700
> The Walker class is sort of a Visitor (not really). The walker "calls
> back" (really calls methods of its subclass) methods when the walker first
> visits and when the walker leaves a particular Node (assuming a depth
> first left-to-right traversal).
> A Visitor pattern class would not neccesarily include the "traversal"
> function (subclasses could) -- it would simply have "handleElement",
> "handleAttribute", "handleText", etc (sorta like SAX). A visitor pattern
> would handle an entire "subtree" at a time (I would guess) instead of
> thinking of the tree in a traversal sense (ie "startElement",
This is an excellent point. We are currently working on introducing the
visitor pattern into 4DOM for the next version or two, over which we would
overlay a global function, tentatively VisitInOrder(), which does the
equivalent of the walker on PyDOM by doing an in-order traversal and invoking
accept(AppropriateVisitor) on each of the DOM nodes. We like this idea
because of the extensibility: we can then have visitors that print out raw
text, or that pretty-print with extra whitespace. A user could add his own
visitor that performs transforms as you mention, etc.
> It seems to me conceptually cleaner for most applications (if somewhat
> less efficient in some cases) to deal with the tree structurally instead
> of procedurally and thats why I would like to see a Visitor pattern..
> Ultimately, it would be nice to be able to encode "transform" functions on
> trees -- approaching and surpassing the functionality of XSL from a
> programmtic (instead of stylesheet) point of view. For example (in prose):
> Take all the children of the "AUTHOR" element which have the attribute
> "INFORMATION" value of "PRIVATE" and compute a funciton on that attribute
> value and put it in a list.
> XSL can do a lot of this, but not all (or at least not cleanly, IMHO).
It seems to me that your example above is definitely not in the domain of
style-sheets, but DOM programming. I guess I could imagine the ECMAScript to
do it in XSL, but it just makes me ask "why?".
A DOM visitor, or a SAX application, however, appear far more appropriate ways
to do this.
FourThought LLC, IT Consultants
Software engineering, project management, Intranets and Extranets