XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Conferences Close Tree View
+ Stylus Studio Feature Requests (1192)
+ Stylus Studio Technical Forum (14621)
+ Website Feedback (249)
+ XSLT Help and Discussion (7625)
- XQuery Help and Discussion (2017)
-> + Issue with Processing Instruct... (2)
-> + problem converting json to XML... (2)
-> + Problem base64 decoding string... (3)
-> + Problems posting multipart for... (5)
-> + trouble with download of price... (2)
-> + Problem with http-post not bei... (3)
-> + path problem, xps_file:writeAl... (9)
-> + Xquery update support? (2)
-> + problem with Stylus studio try... (5)
-> + adding dtd reference to xml ou... (4)
-> + xquery escaping ambarsand when... (3)
-> + Whitespace problem when return... (5)
-> + Problem with namespace prefix ... (5)
-> - Sending via SFTP returns unexp... (1)
-> + Query and Sftp clent (4)
-> + xquery and try - catch (3)
-> + Query + ddtek:http-post optio... (5)
-> + Example files referenced in do... (3)
-> + Automatic Error Detection and ... (3)
-> + Working with result of ddtek:h... (2)
-- [1-20] [21-40] [41-60] Next
+ Stylus Studio FAQs (159)
+ Stylus Studio Code Samples & Utilities (364)
+ Stylus Studio Announcements (113)
Topic  
Postnext
Klarinda GWSubject: position() and last() in XQuery
Author: Klarinda GW
Date: 17 Apr 2006 03:23 AM
Hi,

I have an XML document and I want to write an XQuery to return the position of each element and the number of elements.

My xml document is the bib.xml from W3C XML Query use cases (http://www.w3.org/TR/xquery-use-cases/) The document have 4 book elements (/bib/book). I want to write an XQuery to return all elements and adding a position and last element.

My XQuery is as follows:
<bib>
{
for $book1 in /bib/book
return
<book>
{$book1/title}
<pos>
{position()}
</pos>
<poslast>
{last()}
</poslast>
</book>
}
</bib>

But why the result of position() and last() element is not as expected? They return 1 for position() and 1 for last() for each element. But I expect them to return 1 to 4 and 4 for each element.

The result is as follows:
<bib>
<book>
<title>TCP/IP Illustrated</title>
<pos>1</pos>
<poslast>1</poslast>
</book>
<book>
<title>Advanced Programming in the Unix environment</title>
<pos>1</pos>
<poslast>1</poslast>
</book>
<book>
<title>Data on the Web</title>
<pos>1</pos>
<poslast>1</poslast>
</book>
<book>
<title>The Economics of Technology and Content for Digital TV</title>
<pos>1</pos>
<poslast>1</poslast>
</book>
</bib>

Regards,

Klarinda

Postnext
(Deleted User) Subject: position() and last() in XQuery
Author: (Deleted User)
Date: 17 Apr 2006 04:05 AM
Hi Klarinda,
position() returns the position of the context item inside the context sequence, while last() returns the size of the context sequence; but the FLWOR block does not change the context sequence, so the two functions will always return 1.
In order to achieve what you want you need to count the items in the sequence and then use a "positional variable":

<bib>
{
let $set := /bib/book,
$count := count($set)
for $book1 at $index in $set
return
<book>
{$book1/title}
<pos>
{$index}
</pos>
<poslast>
{$count}
</poslast>
</book>
}
</bib>

Hope this helps,
Alberto

Posttop
Klarinda GWSubject: position() and last() in XQuery
Author: Klarinda GW
Date: 17 Apr 2006 05:42 AM
Hi Alberto,

Thanks. It helps me a lot :)

   
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.