René Nyffenegger's collection of things on the web | |
René Nyffenegger on Oracle - Most wanted - Feedback
- Follow @renenyffenegger
|
XSL: Enumerating chapters | ||
The xsl:for-each construct can be used to iterate over a node set:
The XML File:
<?xml version="1.0"?> <book> <chapter> <para>one</para> <para>two</para> <para>three</para> <para>four</para> </chapter> <chapter> <para>eins</para> <para>zwei</para> </chapter> <chapter> <para>apple</para> </chapter> <chapter> <para>anna</para> <para>bob</para> <para>claude</para> <para>david</para> <para>emilia</para> </chapter> <chapter> <para>large</para> <para>small</para> <para>medium</para> </chapter> <chapter> <para>here</para> <para>there</para> <para>everywhere</para> </chapter> <chapter> <para>large</para> <para>small</para> <para>medium</para> </chapter> <chapter> <para>what</para> <para>when</para> </chapter> <chapter> <para>ok</para> </chapter> <chapter> <para>here</para> <para>there</para> </chapter> </book>
The XSL File:
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <xsl:for-each select="book/chapter"> <h1>chapter: <xsl:value-of select="position()" /></h1> <xsl:apply-templates/> </xsl:for-each> </xsl:template> <xsl:template match="para"> <br> <xsl:value-of select="." /> </br> </xsl:template> </xsl:stylesheet>
The output (whitespaces manually modified):
<?xml version="1.0" encoding="UTF-8"?> <h1>chapter: 1</h1><br>one </br><br>two </br><br>threei </br><br>four </br> <h1>chapter: 2</h1><br>eins </br><br>zwei </br> <h1>chapter: 3</h1><br>apple</br> <h1>chapter: 4</h1><br>anna </br><br>bob </br><br>claude </br><br>david</br><br>emilia</br> <h1>chapter: 5</h1><br>large</br><br>small</br><br>medium </br> <h1>chapter: 6</h1><br>here </br><br>there</br><br>everywhere</br> <h1>chapter: 7</h1><br>large</br><br>small</br><br>medium </br> <h1>chapter: 8</h1><br>what </br><br>when </br> <h1>chapter: 9</h1><br>ok </br> <h1>chapter: 10</h1><br>here</br><br>there</br> |