René Nyffenegger's collection of things on the web | |
René Nyffenegger on Oracle - Most wanted - Feedback
- Follow @renenyffenegger
|
XSL: Sorting twice | ||
This is an extension of this sorting example.
The XML file:
<?xml version="1.0" encoding="UTF-8"?> <persons> <person> <firstname>Edward</firstname> <lastname>Jenner</lastname> </person> <person> <firstname>Gertrud</firstname> <lastname>Elion</lastname> </person> <person> <firstname>Charles</firstname> <lastname>Babbager</lastname> </person> <person> <firstname>Alan</firstname> <lastname>Touring</lastname> </person> <person> <firstname>Ada</firstname> <lastname>Byron</lastname> </person> <person> <firstname>Tycho</firstname> <lastname>Brahe</lastname> </person> <person> <firstname>Johannes</firstname> <lastname>Kepler</lastname> </person> <person> <firstname>Galileo</firstname> <lastname>Galilei</lastname> </person> </persons>
The XSL file:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> <xsl:template match="/"> <html> <body> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match="persons"> <h1>Lastname</h1> <table> <xsl:apply-templates select="person"> <xsl:sort select="lastname"/> </xsl:apply-templates> </table> <h1>Firstname Vorname</h1> <table> <xsl:apply-templates select="person"> <xsl:sort select="firstname"/> </xsl:apply-templates> </table> </xsl:template> <xsl:template match="person"> <xsl:choose> <xsl:when test="position() mod 2 = 0"> <xsl:text disable-output-escaping="yes"> <tr style='background-color="#cceeee"'> </xsl:text> </xsl:when> <xsl:otherwise> <xsl:text disable-output-escaping="yes"> <tr style='background-color="#eeffcc"'> </xsl:text> </xsl:otherwise> </xsl:choose> <td><xsl:value-of select="firstname" /></td> <td><xsl:value-of select="lastname" /></td> <xsl:text disable-output-escaping="yes"> </tr> </xsl:text> </xsl:template> </xsl:stylesheet>
The output (whitespaces manually modified):
|