Чтобы получить желаемый результат, вы можете изменить файл XSLT-1.0 на следующий (XSLT-2.0, по-видимому, не требуется).Одним из важных аспектов было перемещение <xsl:variable name="key" select="@code" />
из элемента td
вверх на два слоя, чтобы к нему можно было получить доступ в xsl:for-each
.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<table>
<xsl:for-each select="/Library/Languages/Language">
<xsl:variable name="key" select="@code" />
<tr>
<td style="border:1px solid red;">
<xsl:value-of select="concat('Language: ', @code)" /><br /><br />
</td>
</tr>
<xsl:for-each select="/Library/Books/Book[Language[@code=$key]]">
<tr>
<td style="border:1px solid red;">
<xsl:value-of select="concat('Title: ', $key,' Book')" />
</td>
</tr>
</xsl:for-each>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Вывод:
<html>
<body>
<table>
<tr>
<td style="border:1px solid red;">Language: English</td>
</tr>
<tr>
<td style="border:1px solid red;">Title: English Book</td>
</tr>
<tr>
<td style="border:1px solid red;">Language: Spanish</td>
</tr>
<tr>
<td style="border:1px solid red;">Title: Spanish Book</td>
</tr>
</table>
</body>
</html>