|
[XQuery Talk Mailing List Archive Home] [By Date] [By Thread] [By Subject] [By Author] [Recent Entries] [Reply To This Message] Construct the absolute xpath (with node position)Vallone, Philip Mr CTR USA AMC Philip.Vallone at us.army.milTue Jun 17 14:25:53 PDT 2008
Michael, thank you for your help. I am using saxon 9.006 .NET API. I am receiving the following error: XQuery static error in #....), '/') return <out>{$xpath}#: Variable $xpath has not been declared Here is my xquery: 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)), ']') } for $path in //item/para let $xpath := $path/string-join(ancestor-or-self::*/f:name-and-position(.), '/') return <out>{$xpath}</out> I have never used user defined functions in xquery so I am probably doing something wrong. Thanks for the help. Phil -----Original Message----- From: http://x-query.com/mailman/listinfo/talk [mailto:http://x-query.com/mailman/listinfo/talk] On Behalf Of Michael Kay Sent: Tuesday, June 17, 2008 12:41 PM To: Vallone, Philip Mr CTR USA AMC; http://x-query.com/mailman/listinfo/talk Subject: RE: Construct the absolute xpath (with node position) 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: http://x-query.com/mailman/listinfo/talk > [mailto:http://x-query.com/mailman/listinfo/talk] On Behalf Of Vallone, Philip Mr CTR > USA AMC > Sent: 17 June 2008 16:56 > To: http://x-query.com/mailman/listinfo/talk > Subject: 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 > > _______________________________________________ > http://x-query.com/mailman/listinfo/talk > http://x-query.com/mailman/listinfo/talk _______________________________________________ http://x-query.com/mailman/listinfo/talk http://x-query.com/mailman/listinfo/talk
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|






