Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Sounds like you have to group the instance belonging to one course by year. This could be done with a key like the following one:</p> <pre><code>&lt;xsl:key name="kCourseInstaneByYears" match="instance" use="concat(ancestor::course/uuid, '|' , year)"/&gt; </code></pre> <p>This assume that the course/uuid is unique for courses.</p> <p>With this key you can try something like this (surly not complete but should show the idea).</p> <pre><code>?xml version="1.0" encoding="utf-8"?&gt; &lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&gt; &lt;xsl:output method="xml" indent="yes"/&gt; &lt;xsl:key name="kCourseInstaneByYears" match="instance" use="concat(ancestor::course/uuid, '|' , year)"/&gt; &lt;xsl:template match="/*"&gt; &lt;html&gt; &lt;body&gt; &lt;xsl:apply-templates select="//course" /&gt; &lt;/body&gt; &lt;/html&gt; &lt;/xsl:template&gt; &lt;xsl:template match="course"&gt; &lt;xsl:variable name ="courseID" select="uuid" /&gt; &lt;h1&gt; &lt;xsl:value-of select="coursetitle" /&gt; &lt;/h1&gt; &lt;xsl:for-each select="descendant::instance[generate-id() = generate-id(key('kCourseInstaneByYears', concat($courseID, '|' , year))[1])]" &gt; &lt;xsl:sort select="year"/&gt; &lt;xsl:variable name="year" select="year" /&gt; &lt;h2&gt; &lt;xsl:value-of select="$year"/&gt; &lt;/h2&gt; &lt;table&gt; &lt;xsl:apply-templates select="key('kCourseInstaneByYears', concat($courseID, '|' , $year))" /&gt; &lt;/table&gt; &lt;/xsl:for-each&gt; &lt;/xsl:template&gt; &lt;xsl:template match="instance" &gt; &lt;tr&gt; &lt;td&gt; &lt;xsl:value-of select="uuid"/&gt; &lt;/td&gt; &lt;td&gt; &lt;xsl:value-of select="instancecode"/&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/xsl:template&gt; &lt;/xsl:stylesheet&gt; </code></pre> <p>Which will generate the following output:</p> <pre><code>&lt;html&gt; &lt;body&gt; &lt;h1&gt;Being better at XSLT&lt;/h1&gt; &lt;h2&gt;2013&lt;/h2&gt; &lt;table&gt; &lt;tr&gt; &lt;td&gt;1054EDE3F28D9873&lt;/td&gt; &lt;td&gt;MPW1F&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;D9FC4501-F504-B560-FB8DFC3EF41C0E1F&lt;/td&gt; &lt;td&gt;MPO1F&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;D9FC5017-0789-16A0-C8BBD0F0BE016E6F&lt;/td&gt; &lt;td&gt;MPW2F&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;D9FC4963-A684-565A-5AA282A7CEC7B4CC&lt;/td&gt; &lt;td&gt;MPO2F&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;h1&gt;Being better at XML&lt;/h1&gt; &lt;h2&gt;2013&lt;/h2&gt; &lt;table&gt; &lt;tr&gt; &lt;td&gt;D9FC5017-0789-16A0-C8BBD0F0BE016E6F&lt;/td&gt; &lt;td&gt;MPW2F&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;D9FC4963-A684-565A-5AA282A7CEC7B4CC&lt;/td&gt; &lt;td&gt;MPO2F&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;h2&gt;2014&lt;/h2&gt; &lt;table&gt; &lt;tr&gt; &lt;td&gt;1054EDE3F28D9873&lt;/td&gt; &lt;td&gt;MPW1F&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;D9FC4501-F504-B560-FB8DFC3EF41C0E1F&lt;/td&gt; &lt;td&gt;MPO1F&lt;/td&gt; &lt;/tr&gt; &lt;/table&gt; &lt;/body&gt; &lt;/html&gt; </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload