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
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
ena jenkinsSubject: XSLT to sort a list alphabetically and divide it into two columns...
Author: ena jenkins
Date: 11 Mar 2009 06:39 PM
Originally Posted: 11 Mar 2009 06:40 PM
Hi,

I need to sort a list of countries alphabetically and display the list
in two columns, but I need the alphabetical list to read vertically
instead of left to right. How do I do this?

Type of output needed (Example):

Australia Finland
Belgium Hong Kong
Canada India
Chile Switzerland



Here is the XML (modified):


<countries>


<country>
<name>Hong Kong</name>
<url>/international/funding/countries/hongkong.aspx</url>
</country>


<country>
<name>Finland</name>
<url>/international/funding/countries/finland.aspx</url>
</country>


<country>
<name>Colombia</name>
<url>/international/funding/countries/colombia.aspx</url>
</country>


<country>
<name>Belgium</name>
<url>/international/funding/countries/belgium</url>
</country>


<country>
<name>China</name>
<url>/international/funding/countries/china.aspx</url>
</country>


<country>
<name>India</name>
<url>/international/funding/countries/india.aspx</url>
</country>


<country>
<name>Australia and New Zealand</name>
<url>/international/funding/countries/australia.aspx</url>
</country>


<country>
<name>Switzerland</name>
<url>/international/funding/countries/switzerland.aspx</url>
</country>


</countries>


Here is my XSLT:


<xsl:for-each select="countries/country">
<xsl:sort select="name"/>
<p>
<a>
<xsl:attribute name="href">
<xsl:value-of select="url"/>
</xsl:attribute>
<xsl:value-of select="name"/>
</a>
</p>


</xsl:for-each>


Thanks...
Any help would be greatly appreciated!

Postnext
ena jenkinsSubject: XSLT to sort a list alphabetically and divide it into two columns...
Author: ena jenkins
Date: 11 Mar 2009 06:44 PM
Australia ____________ Finland
Belgium ______________ Hong Kong
Canada _______________ India
Chile ________________ Switzerland


**My spaces (tabs) used to indicate columns got stripped out when I submitted, but you get the point...

Postnext
John BamptonSubject: XSLT to sort a list alphabetically and divide it into two columns...
Author: John Bampton
Date: 12 Mar 2009 10:31 AM
Originally Posted: 12 Mar 2009 10:29 AM
Hi this should do the trick

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output method="xml" indent="yes"></xsl:output>
<xsl:template match="/">
<xsl:variable name="sortedcountries">
<countries>
<xsl:for-each select="countries/country">
<xsl:sort select="name"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</countries>
</xsl:variable>
<xsl:variable name="counthalf" select="count(countries/country) div 2"></xsl:variable>
<table>
<xsl:for-each select="$sortedcountries/countries/country">

<xsl:if test="position() &lt;= $counthalf">
<tr>
<td>
<a href="{url}"><xsl:value-of select="name"/></a>
</td>
<td>
<a href="{./following-sibling::country[position() = 4]/url}"><xsl:value-of select="./following-sibling::country[position() = 4]/name"/></a>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>

Thanks, John Bampton

Posttop
James DurningSubject: XSLT to sort a list alphabetically and divide it into two columns...
Author: James Durning
Date: 12 Mar 2009 03:12 PM
Originally Posted: 12 Mar 2009 02:21 PM
Replace the 4's with $counthalf, and change variable declaration to:
<xsl:variable name="counthalf" select="ceiling(count(countries/country) div 2)"/>

to deal with odd numbers.

There's no need to create an extra variable to hold the sorted countries; the position() function automatically updates when using the for-each and sort elements.


With these modifications, you would only need XSLT 1.0.

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
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.