Graeme Geldenhuys schrieb:

F*cken hell, now I know why I don't EVER use or work with XML!  I had
a look at your code, and the problem is seemingly easy, but the
solution is definitely not. I tried DocumentElement,
.GetElementsByName(), FindNode(), FirstChild() etc... Not a single one
returns what I would have expected - most functions simply returned
nil.  TDOMNode.FindNode() doesn't even have an implementation.

Right, using XML without documentation sucks :-(

I had the same impression when I tried to implement XML output of fpdoc projects right now.

I then thought I would look at Lazarus's TXMLConfig - because surely
that uses the DOM to find values. To my surprise, that component
implements it's own recursive iteration over nodes to find something -
and it's not easy on the eyes. So what the hell is the point of the
DOM or TXMLDocument implementation if none of the default
implementation can do any searching.

I'm not sure why the XML implementation is cluttered into an stack of derived classes, when only TDomElement is halfways usable.


And to be clear, as a programmer, this is the API interface I would
expect to use... which I don't think is unreasonable. Obviously this
doesn't work, but hey, that's XML for you.

    ReadXMLFile(VXML, ExtractFilePath(ParamStr(0)) + 'LazSolutionsDT.lpk');
    n := vxml.FindNode('/Config/Package/Version');
    n.Attributes.GetNamedItem('Major');
    n.Attributes.GetNamedItem('Minor');

Problem is: typical XML files (see the fpdoc files) have entries of the same name, which has to be interpreted as a node *class* name. The individual node names reside in some arbitrary attribute, maybe 'name', maybe 'key' or something else. That makes a general Find method near impossible :-(

DoDi


--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to