Если вы можете использовать XSLT 2.0, вы можете создать переменную для хранения элементов, которые представляют ваши отображения
<xsl:variable name="products">
<map-entry key="05">Personal Loan</map-entry>
<map-entry key="51">Business Loan – General</map-entry>
<map-entry key="00">Other</map-entry>
</xsl:variable>
Затем вы можете использовать их для поиска по атрибуту key
<xsl:key name="map" match="map-entry" use="@key" />
Затем вы используете этот ключ в некотором роде, например:
<xsl:for-each select="product/months">
<xsl:sort select="key('map', Type, $products)" />
(Кроме того, убедитесь, что вы используете правильный регистр, как в вашем XSLT, который вы использовали Product
, а не product
)
Попробуйте этот XSLT, который вы можете увидеть в действии на http://xsltfiddle.liberty -development.net / pPzifoQ
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output method="xml" indent="yes" />
<xsl:variable name="products">
<map-entry key="05">Personal Loan</map-entry>
<map-entry key="51">Business Loan – General</map-entry>
<map-entry key="00">Other</map-entry>
</xsl:variable>
<xsl:key name="map" match="map-entry" use="@key" />
<xsl:template match="/">
<fo:table>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block>Product Type</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>Quantity</fo:block>
</fo:table-cell>
</fo:table-row>
<xsl:for-each select="product/months">
<xsl:sort select="key('map', Type, $products)" />
<fo:table-row>
<fo:table-cell>
<fo:block>
<xsl:value-of select="key('map', Type, $products)" />
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>
<xsl:value-of select="Number"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
</fo:table>
</xsl:template>
</xsl:stylesheet>
Обратите внимание: если вы можете использовать XSLT 3.0, вы можете использовать специальную функцию "map", которая немного упрощает вещи
Попробуйте этот XSLT 3.0, который вы можете увидеть в действии на http://xsltfiddle.liberty -development.net / bnnZVx
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
exclude-result-prefixes="xs"
version="3.0">
<xsl:output method="xml" indent="yes" />
<xsl:variable name="products" as="map(xs:string, xs:string)">
<xsl:map>
<xsl:map-entry key="'05'" select="'Personal Loan'"/>
<xsl:map-entry key="'51'" select="'Business Loan – General'"/>
<xsl:map-entry key="'00'" select="'Other'"/>
</xsl:map>
</xsl:variable>
<xsl:template match="/">
<fo:table>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block>Product Type</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>Quantity</fo:block>
</fo:table-cell>
</fo:table-row>
<xsl:for-each select="product/months">
<xsl:sort select="$products(Type)" />
<fo:table-row>
<fo:table-cell>
<fo:block>
<xsl:value-of select="$products(Type)" />
</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block>
<xsl:value-of select="Number"/>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:for-each>
</fo:table-body>
</fo:table>
</xsl:template>
</xsl:stylesheet>