[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