[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Dividing a list of nodes into parts of the alphabe
Since you're using XSLT 2.0 I would assume that you are doing the grouping using xsl:for-each-group. A useful technique here is to use a function to calculate the grouping key: <xsl:for-each-group select="item" group-by="f:grouping-key(.)"> <xsl:result-document ... </xsl:result-document> </xsl:for-each-group> <xsl:function name="f:grouping-key" as="xs:string"> <xsl:param name="item" as="element(item)"/> <xsl:variable name="ranges"> <range from="A" to="G"/> <range from="H" to="L"/> <range from="M" to "P"/> <range from="Q" to "Z"/> </xsl:variable> <xsl:sequence select="$ranges/range [string(@from) lt substring($item/artist,1,1) and string(@to) ge substring($item/artist,1,1)]/@from"/> </xsl:function> I hope this gives you some ideas about how to tackle the problem. You could of course read the table of ranges from a secondary input document to make it more flexible, or you could calculate it as a function of the input data. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Jannis Pohlmann [mailto:info@xxxxxxxxxxx] > Sent: 03 December 2004 04:36 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: Dividing a list of nodes into parts of the alphabet > > Hello, > > I am working on a shop system for a friend of mine. This > system shall parse > one XML file into several static XHTML documents. > As you may expect, there are several problems to manage. > XHTML documents > have to be created for each product, for each category and so on. > Creating a page for each product in its categories > directory - e.g. /catalogue/CDs/product_120.html - is easy using > xsl:result-document since I make use of the latest version of Saxon > and XSLT 2.0. > > But with the categories I ran into several logistic yet highly > interesting problems: > > To explain this I will have describe some parts of my XML structure: > > --- > > <categories> > <group name="CDs"> > <cat id="cd">CD</cat> > <cat id="mcd">MCD</cat> > <cat id="digicd">Digipack CD</cat> > </group> > <group name="LPs"> > <cat id="lp">LP</cat> > <cat id="ep">EP</cat> > <cat id="10">10 inch</cat> > </group> > <group name="Textiles"> > <cat id="tshirt">T-Shirt</cat> > <cat id="ls">Longsleeve</cat> > </group> > </categories> > > (...) > > <item> > <artist>Satyricon</artist> > <title>Rebel Extravaganza</title> > (...) > </item> > <item> > <artist>Secrets of the Moon</artist> > <title>Carved in Stigmata Wounds</title> > </item> > > --- > > As you may imagine, the shop might have lots more > CDs than, for example, Textiles, so I would like to add an > opportunity to split the page created for each > <group> into one or more pages, each including all artists beginning > with the same letter or one letter out of a range of letters. > > --- > > First example: > (catalogue/CDs/CDs.html -> mapped to A.html by Apache's > mod_rewrite) > catalogue/CDs/A.html > catalogue/CDs/B.html > (...) > catalogue/CDs/Z.html > (and catalogue/CDs/0-9.html of course but that should be no > problem with <xsl:sequence select="0 to 9"> or somewhat) > > Second example: > (catalogue/LPs/LPs.html -> redirected to A-E.html by Apache's > mod_rewrite) > catalogue/LPs/A-E.html > catalogue/LPs/F-J.html > (...) > catalogue/LPs/U-Z.html > > Third example > catalogue/Textiles/Textiles.html > > --- > > I think this is kind of tricky as I want to make the splitting option > as variable as possibly. > What I don't know is if I need a new attribute or child in > <group/> with > comma-separated letters/letter-groups and how I may interpret > these. Or > is it possible to interpret letters or letter-groups as xsl:sequence's > in order to iterate through them? > > I have been thinking about this for two hours now. Perhaps some of > you do know a solution for it or at least are able to help in > developing > one. > > Greetings, > Jannis
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|