Word count
File: Data.xml <poem> <author>author 1</author> <date>1912</date> <title>Song</title> <stanza> <line>line 1</line> <line>line 2</line> <line>line 3</line> <line>line 4</line> </stanza> <stanza> <line>line 5</line> <line>line 6</line> <line>line 7</line> <line>line 8</line> </stanza> <stanza> <line>line 9</line> <line>line 10</line> <line>line 11</line> <line>line 12</line> </stanza> </poem> File: Transform.xslt <?xml version="1.0" encoding="iso-8859-1"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes" /> <xsl:template match="/"> <wordcount> <xsl:for-each-group group-by="." select=" for $w in tokenize(string(.), '\W+') return lower-case($w)"> <xsl:sort select="count(current-group())" order="descending" /> <word word="{current-grouping-key()}" frequency="{count(current-group())}" /> </xsl:for-each-group> </wordcount> </xsl:template> </xsl:stylesheet> Output: <?xml version="1.0" encoding="UTF-8"?> <wordcount> <word word="line" frequency="12"/> <word word="" frequency="2"/> <word word="1" frequency="2"/> <word word="author" frequency="1"/> <word word="1912" frequency="1"/> <word word="song" frequency="1"/> <word word="2" frequency="1"/> <word word="3" frequency="1"/> <word word="4" frequency="1"/> <word word="5" frequency="1"/> <word word="6" frequency="1"/> <word word="7" frequency="1"/> <word word="8" frequency="1"/> <word word="9" frequency="1"/> <word word="10" frequency="1"/> <word word="11" frequency="1"/> <word word="12" frequency="1"/> </wordcount>