(отредактировано для включения предложений Мартина Хоннена)
Привет всем,
Я пытался заставить функцию ключа работать правильно в приведенной ниже таблице стилей.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:date="http://www.oracle.com/XSL/Transform/java/java.util.Date"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:m="http://mapping.tables" >
<xsl:key name="preferences" match="preferences/preference" use="@code"/>
<xsl:template match="Reservation/Detail" >
<xsl:for-each select="Preferences/Preference">
<xsl:if test ="string-length(./PreferenceCode)>0">
    * (<xsl:value-of select="./PreferenceCode"/>)
<xsl:choose>
<xsl:when test="./PreferenceCode!='PETS'">
<xsl:call-template name="prefmap">
<xsl:with-param name="code" select="./PreferenceCode"/>
</xsl:call-template>
<br/><br/>
</xsl:when>
</xsl:choose>
</xsl:if>
</xsl:for-each>
</xsl:template
<xsl:template name="prefmap">
<xsl:param name="code"/>
You got here (called template) with code <xsl:value-of select="$code"/>
<xsl:for-each select="document('')">
<xsl:value-of select="key('preferences',$code)"/>
</xsl:for-each>
</xsl:template>
<m:Maps xmlns="">
<preferences>
<preference code="ANT">
Hypoallergenic Bedding
</preference>
<preference code="NSK">
Non-smoking Room
</preference>
<preference code="SMK">
Smoking Room
</preference>
</preferences>
</m:Maps>
</xsl:stylesheet>
Он принимает входные данные (которые я не контролирую) и выдает это:
* (ANT) You got here (called template) with code ANT
* (EARLY) You got here (called template) with code EARLY
* (NSK) You got here (called template) with code NSK
Когда я ожидал:
* (ANT) You got here (called template) with code ANT
Hypoallergenic Bedding
* (EARLY) You got here (called template) with code EARLY
* (NSK) You got here (called template) with code NSK
Non-smoking Room
Я попытался включить этот фрагмент восновной шаблон для отладки, но он не выдал:
<xsl:for-each select="key('preferences',./PreferenceCode)">
<p>
Code: <xsl:value-of select="@code"/><br />
Description: <xsl:value-of select="."/>
</p>
</xsl:for-each>
У меня проблема с определением ключа или способом, которым я пытаюсь его использовать?
Спасибо всем завперед.