Вы уже находитесь в элементе <container>
внутри <xsl:for-each>
. Детей нет, поэтому выбор еще <container>
внутри <xsl:if>
ничего не даст.
Вы хотите выполнить проверку с узла <tool>
.
<xsl:for-each select="/store/tools/tool">
<xsl:if test="container = $currentBOX">
<xsl:value-of select="@IDT"/><br />
</xsl:if>
</xsl:for-each>
что проще записать как
<xsl:for-each select="/store/tools/tool[container = $currentBOX]">
<xsl:value-of select="@IDT"/><br />
</xsl:for-each>
В целом, более простой способ написания двух шаблонов был бы таков:
<xsl:template match="box">
<li>
<xsl:text>Box </xsl:text>
<xsl:value-of select="@ID"/>
<xsl:text>contains the following tools : </xsl:text>
</li>
<xsl:apply-templates select="/store/tools/tool[container = current()/@IDB]" />
</xsl:template>
<xsl:template match="tool">
<xsl:value-of select="@IDT"/><br />
</xsl:template>
И в качестве альтернативы вы можете использовать <xsl:key>
для индексации <tool>
элементов по их <container>
значению:
<xsl:key name="kToolByContainer" match="/store/tools/tool" use="container" />
<xsl:template match="box">
<li>
<xsl:text>Box </xsl:text>
<xsl:value-of select="@ID"/>
<xsl:text>contains the following tools : </xsl:text>
</li>
<xsl:apply-templates select="key('kToolByContainer', @IDB)" />
</xsl:template>
<xsl:template match="tool">
<xsl:value-of select="@IDT"/><br />
</xsl:template>