[fpc-pascal] Proposal for a XPath Namespace Resolver

Daniel Gaspary dgaspary at gmail.com
Sat Oct 5 19:08:36 CEST 2013

(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:

  <u1:e1 xmlns:u1="URI-1" u1:AnAttribute="AttValue"/>
  <u2:e2 xmlns:u2="URI-2"/>


    EvaluateXPathExpression('//@u1:AnAttribute', 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;

TXPathNeedUriEvent would be something like:

procedure (Sender: TXPathNSResolver; out AUri: String) of object;

Searching first at CurrentNode.lookupNamespaceURI and, if not found,
using OnNeedUri.


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

More information about the fpc-pascal mailing list