Take a look at functx for examples of this http://www.xqueryfunctions.com/xq/functx_path-to-node.html
---------------------------------------- David A. Lee [email protected]<mailto:[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
