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
Rodolfo VegasSubject: Get rid of spaces in returned output
Author: Rodolfo Vegas
Date: 24 Oct 2008 06:29 AM
Hi, I'm stucked with a annoying issue and hope you can help me.

I'm accesing a table in a relational database (on SQL Server) from wich I have (basically) to process (and output) the following information for each row (the table contains information about training courses):

1 - A unique key for the course.
2 - Different days of the week (the initial letter used for each day, in spanish: L,M,X,J,V,S) which the course take place (Sundays are excluded).

On the input table there is a column called DAYS, that keeps the information of ALL the dates that the course take place (sessions) in the following format:

dd/mm/yyyy.dd/mm/yyyy.dd/mm/yyyy. ... dd/mm/yyyy

An example of input and expected output:

Input: 09/10/2008.14/10/2008.16/10/2008.21/10/2008
Output: MJ

Note that in the result strings, the days must be in order (in this case, altough the first (and third) date corresponds to a Thursday -J-, the first letter is the M, that corresponds to the second and fourth dates).

Up to now I have this code:

declare variable $year as xs:string external;

<Courses>
{
for $row in collection("TRAINING.dbo.COURSES")/COURSES
where $row/YEAR = $year
and not(empty($row/DAYS))
return
<Course>
<CourseKey>
<Code>
{$row/CODE}
</Code>
<Year>
{$row/YEAR}
</Year>
</CourseKey>
<WeekDays>
{distinct-values
(
for $date in tokenize(normalize-space($row/DAYS), "[.]")
let $DDMMYYYY := replace($date, "/", "")
let $DD := substring($DDMMYYYY, 1, 2)
let $MM := substring($DDMMYYYY, 3, 2)
let $YYYY := substring($DDMMYYYY, 5, 4)
let $weekDayNumber := xs:integer((xs:date(concat($YYYY,'-',$MM,'-',$DD)) - xs:date('1901-01-06')) div xs:dayTimeDuration('P1D')) mod 7
where string-length($date) = 10
order by $weekDayNumber
return
if ($weekDayNumber = 1) then "L"
else if ($weekDayNumber = 2) then "M"
else if ($weekDayNumber = 3) then "X"
else if ($weekDayNumber = 4) then "J"
else if ($weekDayNumber = 5) then "V"
else if ($weekDayNumber = 6) then "S"
else ()
)
}
</WeekDays>
</Course>
}
</Courses>


And this is the result for the example:

<Courses>
<Course>
<CourseKey>
<Code>
BCA103
</Code>
<Year>
2008
</Year>
</CourseKey>
<WeekDays>
M J
</Weekdays>
</Course>
</Courses>

How can I get rid of the spaces (one in this case) for the WeekDays element? (The first question really should be: Why does it generate this spaces?)

If the result for this element were a string I could do a replace(.," ",""), but as it is a sequence, this is not possible. (As far as I know, there is no way to convert a sequence into a string, is there?)

Is there any solution to do this, if possible, in the 'return' portion of the code, without having to reprocess the resulting XML document?

Postnext
(Deleted User) Subject: Get rid of spaces in returned output
Author: (Deleted User)
Date: 24 Oct 2008 06:48 AM
Hi Rodolfo,
when a sequence of strings is converted into a single text node, a space is added between each item. If you want to have them collapsed you should wrap the result of the distinct-values inside a string-join(distinct-values(...),"") call.

Hope this helps,
Alberto

Postnext
Rodolfo VegasSubject: Get rid of spaces in returned output
Author: Rodolfo Vegas
Date: 27 Oct 2008 05:41 AM
Hi Alberto,

It worked fine. Thanks for your quick response. As always a great support from Stylus Studio...

Only one more question (for curiosity only). Is this a 'standard' XQuery behaviour or is it DataDirect's (and/or Stylus Studio's built-in) XQuery processor particular way of handling this?

Thanks a lot again.
Regards,
Rodolfo

Posttop
(Deleted User) Subject: Get rid of spaces in returned output
Author: (Deleted User)
Date: 27 Oct 2008 06:59 AM
Hi Rodolfo,
this is the official XQuery behavior; in section 3.7.1.3 of the specs there are these examples

# Example:

<a>{1, 2, 3}</a>

The constructed element node has one child, a text node containing the value "1 2 3".


# Example:

<b>{1, "2", "3"}</b>

The constructed element node has one child, a text node containing the value "1 2 3".

Alberto

   
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.