On 29/11/2011, Hans-Peter Diettrich <DrDiettrich1@a....> wrote: > > Right, using XML without documentation sucks :-(
In this case, I don't think even documentation would have helped. > I had the same impression when I tried to implement XML output of fpdoc > projects right now. I feel your pain. :-) > I'm not sure why the XML implementation is cluttered into an stack of > derived classes, when only TDomElement is halfways usable. As far as I can see, XML handling should be rather simple. After all, it is a classic case of a tree hierarchy of data elements. Two classes only. TXMDocument and TXMLNode. That should be all that is needed to find anything in XML. TXMLNode represents itself, and acts as a container for its child nodes. A basic Composite Design pattern example. > maybe 'key' or something else. That makes a general Find method near > impossible :-( I disagree. Just read the following article I found. This guy use the same idea I mentioned in my example, and as I mentioned above - about composite design pattern. http://www.delphi3000.com/articles/article_3314.asp?SK= For those too lazy to read the article, here is the gist of it. type TxmlNode = class property Name: string; property Value: string; property Parent: TxmlNode; property Child[Idx: integer]: TxmlNode; property ChildrenCount: integer; property Node[Path:string]: TxmlNode; default; end; A simple easy to understand API. Node[] takes a Path not a Name. So you can do things like MyNode.Node[/Config/Package/Version]; ...and if you need to retrieve a list of nodes... n := MyNode.Node[/Config/Package/Files]; if Assigned(n) then begin for i := 0 to n.ChildrenCount-1 do begin .... I would even add a FindNode() method which internally uses Node[] - just to make in very clear to the developer using this class. I guess if I ever need to work with XML (lets hope that never happens), I'll implement my (yet again) own classes. Programming is supposed to solve problems, not create more. The alternative would have been to modify the FCL DOM code, but that would probably cause breakages all over existing code (eg: fpdoc, makeskel etc) - so FCL DOM code is now stuck in near unusable limbo land. :-( -- Regards, - Graeme - _______________________________________________ fpGUI - a cross-platform Free Pascal GUI toolkit http://fpgui.sourceforge.net -- _______________________________________________ Lazarus mailing list [email protected] http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
