This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: unique-sequence-numbering
- From: "Michael Kay" <michael dot h dot kay at ntlworld dot com>
- To: <xsl-list at lists dot mulberrytech dot com>
- Date: Wed, 7 Aug 2002 15:16:37 +0100
- Subject: RE: [xsl] unique-sequence-numbering
- Reply-to: xsl-list at lists dot mulberrytech dot com
> 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@ntlworld.com
work: Michael.Kay@softwareag.com
>
>
> On Wed, 7 Aug 2002 subbu@boltblue.com 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