你错过了
current()
功能。
<xsl:for-each select="/Root/CustomerOrder/Drinks/Drink">
<xsl:sort select="/Root/DrinkSelections/Drink[@id = current()/@oid]/@name"/>
<xsl:value-of select="/Root/DrinkSelections/Drink[@id = current()/@oid]/@name"/>
</xsl:for-each>
但更重要的是,为了可读性,您缺少XSL键
和
性能:
<xsl:key name="kDrinkById" match="DrinkSelections/Drink" use="@id" />
<!-- ... later ... -->
<xsl:for-each select="/Root/CustomerOrder/Drinks/Drink">
<xsl:sort select="key('kDrinkById', @oid)/@name"/>
<xsl:value-of select="key('kDrinkById', @oid)/@name"/>
</xsl:for-each>
A您可能没有正确使用模板,因为如果使用了模板,您的
xsl:for-each
选择表达式不会从根开始。
<xsl:template match="Root">
<xsl:apply-templates select="CustomerOrder/Drinks" />
</xsl:template>
<xsl:template match="CustomerOrder/Drinks">
<xsl:apply-templates select="Drink">
<xsl:sort select="key('kDrinkById', @oid)/@name"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="CustomerOrder/Drinks/Drink">
<xsl:value-of select="key('kDrinkById', @oid)/@name"/>
</xsl:template>
请注意,我也为每个删除了。每个
对于每个
避免是朝着更好的XSLT代码迈进的一步(极少数例外适用)。