Or fn:path (http://www.w3.org/TR/xpath-functions-30/#func-path) if your XQuery processor already supports it.
Matthias On May 15, 2012, at 8:39 AM, David Lee wrote: > Take a look at functx for examples of this > > http://www.xqueryfunctions.com/xq/functx_path-to-node.html > > > > ---------------------------------------- > David A. Lee > [email protected] > http://www.xmlsh.org > > From: [email protected] [mailto:[email protected]] On Behalf Of > Custer, Mark > Sent: Tuesday, May 15, 2012 11:29 AM > To: xquery-discuss > Subject: [xquery-talk] Help with an XQuery function > > Hi all, > > I’m quite new to XQuery, and I was wondering if I someone could give me > feedback on a simple function that I wanted to write. Once finished, the > function should provide the XPATH to an individual node, complete with each > node’s position in the path (but only if there is more than one preceding > sibling with an equivalent node name). So, if you had an XML document like: > > <a> > <b> > <c/> > <c/> > <c>test the function here</c> > </b> > </a> > > …and if the function was called while processing that last c node, it should > print out: > > /a/b/c[3] > > So far, I have the following XQuery: > > declare namespace local = "http://local"; > declare function local:xpath > ($nodes as node()*) as xs:string* { > > for $node in $nodes/ancestor-or-self::* > let $siblings := count($node/preceding-sibling::*[name()=name($node)]) > for $number in $siblings > let $position := $number > return if($position gt 0) > then concat('/', name($node), '[', $position + 1, ']') > else concat('/', name($node)) > }; > > This works, but I was wondering if it could be written better (and I imagine > that someone already has written a concise XQuery function to do this). > Also, I’m not entirely sure why, but when I run the above function, I get the > following result: > > /a /b /c[3] > > …where there is a single space present after each returned value, aside from > the last one. > > Any advice or suggestions are welcome. Thanks, > > Mark > > > > _______________________________________________ > [email protected] > http://x-query.com/mailman/listinfo/talk
_______________________________________________ [email protected] http://x-query.com/mailman/listinfo/talk
