[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