См. Мое решение XSLT 1.0 и 2.0 ниже. Проблема в вашем коде:
<xsl:value-of select="description [@courseCode = text()]"/>
Это означает, что вы ищете элемент description
, атрибут которого courseCode
совпадает с его текстовым значением. Я сохраняю код курса в переменной и проверяю элементы course
, атрибут которых такой же, как у этой переменной.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output indent="yes" />
<xsl:template match="/">
<ol>
<xsl:for-each select="/school/student">
<xsl:sort data-type="text" order="ascending" select="name" />
<li>
<xsl:value-of select="name" />
<ol type="a">
<xsl:for-each select="takes">
<xsl:sort data-type="text" select="." order="ascending" />
<li>
<xsl:variable name="coursecode" select="." />
<xsl:value-of select="concat('(',.,') ')" />
<xsl:for-each select="/school/course[@courseCode = $coursecode]">
<xsl:value-of select="description" />
</xsl:for-each>
</li>
</xsl:for-each>
</ol>
</li>
</xsl:for-each>
</ol>
</xsl:template>
</xsl:stylesheet>