(Let me know if bugtracker is better to discuss the idea)
Today the XPath Ns Resolver is marked as "Experimental" and is just an alias for TDomNode:
TXPathNSResolver = TDOMNode {!!! experimental}; [1]
The problem happens when the Namespace definition is not at the root of the XML being processed:
<root>
<u1:e1 xmlns:u1="URI-1" u1:AnAttribute="AttValue"/> <u2:e2 xmlns:u2="URI-2"/>
</root>
Using....
EvaluateXPathExpression('', x.DocumentElement,
x.DocumentElement);(x is a TXmlDocument)
Will raise an Exception due to the "Resolver" not being capable of finding the URI when starting from root.
I think of something simple as:
TXPathNSResolver = class
property CurrentNode: TDomNode; //Necessary??
property xml: TXmlDocument;
property OnNeedUri: TXPathNeedUriEvent;
end;TXPathNeedUriEvent would be something like:
procedure (Sender: TXPathNSResolver; out AUri: String) of object;Searching and, if not found,
using OnNeedUri.
Ideas?
Should I post it at mantis, change, quit.. ?
[1] Line #352: http://svn.freepascal.org/cgi-bin/viewvc.cgi/trunk/packages/fcl-xml/src/xpath.pp?view=markup
