[xquery-talk] Getting node position in a for statement

Vallone, Philip Mr CTR USA AMC Philip.Vallone at us.army.mil
Mon Jun 16 10:36:58 PDT 2008


 
Thank you David,

The question is different. Forgive me as I am learning :).

I want to return the position of <tr> within its parent.

E.g.

 <row xpath="root/table/tbody/tr" position="1" cellcount="1">Table 1 -
Index</row>
 <row xpath="root/table/tbody/tr" position="2" cellcount="1">Table 1 -
Index</row>
<!-- New table started -->
 <row xpath="root/table/tbody/tr" position="1" cellcount="2">Table 2 -
Dictionary</row>
 <row xpath="root/table/tbody/tr" position="2" cellcount="2">Table 2 -
Dictionary</row>
 <row xpath="root/table/tbody/tr" position="3" cellcount="2">Table 2 -
Dictionary</row>
 <row xpath="root/table/tbody/tr" position="4" cellcount="2">Table 2 -
Dictionary</row>

The expression you recommended returns a the sequence of nodes in the
entire document.

 <row xpath="root/table/tbody/tr" position="1" cellcount="1">Table 1 -
Index</row>
 <row xpath="root/table/tbody/tr" position="2" cellcount="1">Table 1 -
Index</row>
 <row xpath="root/table/tbody/tr" position="3" cellcount="2">Table 2 -
Dictionary</row>
 <row xpath="root/table/tbody/tr" position="4" cellcount="2">Table 2 -
Dictionary</row>
 <row xpath="root/table/tbody/tr" position="5" cellcount="2">Table 2 -
Dictionary</row>
 <row xpath="root/table/tbody/tr" position="6" cellcount="2">Table 2 -
Dictionary</row>
....

Sorry for not being clear.

Thanks for the help,

Phil


-----Original Message-----
From: David Carlisle [mailto:davidc at nag.co.uk] 
Sent: Monday, June 16, 2008 9:17 AM
To: Vallone, Philip Mr CTR USA AMC
Cc: talk at x-query.com
Subject: Re: [xquery-talk] Getting node position in a for statement



in

	let $pos := $rows/position()

$rows is (at each iteration) a single tr element so $rows/position()
will always be 1.

You want to use an "at" clause as in the for expression:

for $rows at $p in //table/tbody/tr
	let $cells := count($rows/th)
	let $title := $rows/ancestor::table/title...
return
<row position="{$p} cellcount="{$cells}" >{data($title)}</row>


or use an xpath rather than a for expression (so that position()
reflects the position in the sequence)

 //table/tbody/tr/<row position="{position()} cellcount="{count(th)}">
      {ancestor::table/title/data(.)}</row>


(This seems to be the same question, and same answer as last week
though?)

David


________________________________________________________________________
The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.

This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs. 
________________________________________________________________________



More information about the talk mailing list