[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: unique-sequence-numbering

Subject: RE: unique-sequence-numbering
From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx>
Date: Wed, 7 Aug 2002 15:16:37 +0100
xslt sequence number
> Short of an elegant solution, here's a simple way to do it:
> 
> Step 1: go through your XML file and create another with the student 
> elements duplicated as necessary.
> 
> Step 2: go through the new file and create the output -- sequence 
> numbering is now trivial.

Doing a transformation in two phases often *is* the elegant solution.

Of course with the node-set() extension you can do this with one
stylesheet.

There's another solution here, which is to calculate the sequence number
as position() plus the number of preceding students that have
address="YYY":

position() + count(preceding-sibling::student[address='YYY'])

But this may have O(n^2) performance (i.e. it won't run at "wire-speed"
unless you have a very good optimizer). So the two phase solution may be
better.

Michael Kay
Software AG
home: Michael.H.Kay@xxxxxxxxxxxx
work: Michael.Kay@xxxxxxxxxxxxxx 
> 
> 
> On Wed, 7 Aug 2002 subbu@xxxxxxxxxxxx wrote:
> 
> ..Sorry for reposting..The subject was wrong!!
> ..i have an xml file which looks like below.
> ..<?xml version="1.0"?>
> ..<students>
> ..	<student id = "101">
> ..		<name>A</name>
> ..		<address>XXX</address>
> ..	</student>
> ..	<student id = "201">
> ..		<name>B</name>
> ..		<address>YYY</address>
> ..	</student>
> ..	<student id = "301">
> ..		<name>C</name>
> ..		<address>XXX</address>
> ..	</student>
> ..	<student id = "401">
> ..		<name>E</name>
> ..		<address>YYY<address>
> ..	</student>
> ..</students>
> ..
> ..And i have to deliver a CSV file that has the following 
> fields. .. ..Student-id , SequenceNumber , name, address. .. 
> ..Sequence number is an automatically generated  number ( 
> should start from 1 to 
> ..end of Students )..
> ..
> ..so a typical CSV FIle would be..
> ..
> ..101,1,A,abc
> ..102,2,B,bcd
> ..103,3,C,cde
> ..104,4,D,efg
> ....
> ..Now There is a business rule that says that if a student 
> has an address value 
> ..that is equal to 'YYY',  then show the complete information 
> *line* twice, with 
> ..only the sequence number changed..
> ..That is
> ..101,1,A,abc
> ..102,2,B,bcd
> ..102,3,B,bcd  <-- repeated again with sequence number 
> changed ..103,4,C,cde ..104,5,D,efg ..104,6,D,efg <-- 
> repeated again with sequence number changed .. .. ..I am 
> using the position() function to get the serial number..This 
> is where the 
> ..problem starts..
> ..If i put a condition that
> .. if address == 'YYY' ( just pseudo code. dont mind the 
> syntax ) ..{ ..value-of-select --> @id,position(),name,address
> ..		  @id,position()+1,name,address
> ..}
> ..else
> ..{
> ..value-of-select --> @id,position(),name,address
> ..}
> ..
> ..I end up getting something like this
> ..
> ..101,1,A,abc
> ..102,2,B,bcd
> ..102,3,B,bcd  <-- repeated again with sequence number 
> changed ..103,3,C,cde  <-- same sequence number repeated... 
> That is the position .. ..104,4,D,efg ..104,5,D,efg <-- 
> repeated again with sequence number changed .. ..and what i 
> want should look like .. ..101,1,A,abc ..102,2,B,bcd 
> ..102,3,B,bcd  <-- repeated again with sequence number 
> changed ..103,4,C,cde  <-- this is not showing up position 
> but prev-seq+1 ..104,5,D,efg ..104,6,D,efg <-- repeated again 
> with sequence number changed .. ..so the requirement tells, 
> if you find address equal to 'YYY', then add it show 
> ..it once more with a sequence number -> prev-seq-num +1  and 
> then every 
> ..subsequent sequence number should be consequitive. The 
> sequence number is a 
> ..unique number ( from 1 to End of students ).
> ..
> ..I can not think of a way to do this.This looks totally like 
> a dead end to me. ..I shall be highly thankful if some one 
> can please help me out of this 
> ..situation...
> ..Please let me know if i am missing out any information that 
> would make the 
> ..question clearer..
> ..
> ..Thanks a ton!!!!!!!!! 
> ..
> ..--------------------------------------------------------------
> ..Sent with "Me-Mail", Boltblue's FREE mobile messaging 
> service. ..http://www.boltblue.com .. .. .. XSL-List info and 
> archive:  http://www.mulberrytech.com/xsl/xsl-list
> ..
> 
> -- 
> 
> Jeff Kenton
> DataPower Technology, Inc.
>  *** Wire Speed XSLT ***
> 
http://www.datapower.com/products.shtml



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.