You seem to be implying that the fact that it builds a tree is relevant (if XML::LibXML::SAX even builds a tree). It's not. To be able to provide the error message it already provides, the parser needs a list of unclosed elements.
my @unclosed = (
'ROOT',
'ERROR',
'ERROR',
);
All that's needed to provide a better error message is to note a line number along with the name of the element.
my @unclosed = (
[ 'ROOT', 3 ],
[ 'ERROR', 8 ],
[ 'ERROR', 8 ],
);
Yes, it uses extra memory, but 1) it doesn't add to the magnitude (O()) of the memory used, 2) the maximum used is proportional to the depth of tree and they're usually quite shallow (20?).
As for expat being simpler, its actually almost identical to SAX. It wouldn't surprise me if one inspired the other.
|