[fpc-pascal] Proposal for a XPath Namespace Resolver
Benito van der Zander
benito at benibela.de
Sat Oct 5 22:59:36 CEST 2013
Alternatively, just use the XPath implementation of my Internet Tools
(http://www.benibela.de/sources_en.html#internettools).
Works perfectly there.
E.g. process('<root> <u1:e1 xmlns:u1="URI-1" u1:AnAttribute="AttValue"/>
<u2:e2 xmlns:u2="URI-2"/> </root>', '//@u1:AnAttribute' ).toString
returns 'AttValue'
On 10/05/2013 07:08 PM, Daniel Gaspary wrote:
> (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('//@u1:AnAttribute', 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 first at CurrentNode.lookupNamespaceURI 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
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-pascal
More information about the fpc-pascal
mailing list