[xquery-talk] Construct the absolute xpath (with node position)

Michael Kay mike at saxonica.com
Tue Jun 17 18:41:04 PDT 2008


Sure, just replace name() in your example by f:name-and-position(.), which
function is defined as

declare function f:name-and-position($n as element()) as xs:string {
  concat(name($n), '[',
1+count($n/preceding-sibling::*[node-name(.)=node-name($n)), ']')
}

This is assuming that your XQuery processor supports the preceding-sibling
axis. Officially it's optional, as is the ancestor axis.

Michael Kay
http://www.saxonica.com/
 

> -----Original Message-----
> From: talk-bounces at x-query.com 
> [mailto:talk-bounces at x-query.com] On Behalf Of Vallone, 
> Philip Mr CTR USA AMC
> Sent: 17 June 2008 16:56
> To: talk at x-query.com
> Subject: [xquery-talk] Construct the absolute xpath (with 
> node position)
> 
> 
> Hi, is it possible to construct the absolute xpath (with node 
> position) from an xquery expression?
> 
> Take the following XML:
> 
> <root>
> 	<item>
> 		<para>hello</para>
> 		<para>goodbye</para>
> 	</item>
> 	<item>
> 		<para>hello</para>
> 		<para>goodbye</para>
> 		<para>end</para>
> 	</item>
> 	<item>
> 		<para>hello</para>
> 		<para>middle</para>
> 		<para>goodbye</para>
> 	</item>
> </root>
> 
> Take the following xquery:
> 
> for $path in //item/para
> let $xpath := $path/string-join(ancestor-or-self::*/name(), 
> '/') return <out>{$xpath}</out>
> 
> Which returns:
> 
> <out>root/item/para</out>
> <out>root/item/para</out>
> ....
> 
> 
> Is it possible to construct an xquery expression to output 
> the xpath with node position:
> 
> <out>/root/item[1]/para[1]</out>
> <out>/root/item[1]/para[2]</out>
> <out>/root/item[2]/para[1]</out>
> <out>/root/item[2]/para[2]</out>
> <out>/root/item[2]/para[3]</out>
> <out>/root/item[3]/para[1]</out>
> <out>/root/item[3]/para[2]</out>
> <out>/root/item[3]/para[3]</out>
> 
> Thanks for the help.
> 
> Phil	
> 
> _______________________________________________
> talk at x-query.com
> http://x-query.com/mailman/listinfo/talk



More information about the talk mailing list