Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <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>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

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