XML:
<?xml version="1.0" encoding="windows-1251"?>
<mode>
<term>
<name>abhdk</name>
</term>
<term>
<name>njhjsu</name>
</term>
<term>
<name>sdasd</name>
</term>
<term>
<name>vbvbcd</name>
</term>
...
</mode>
<mode>
<term>
<name>asdfd</name>
</term>
<term>
<name>vcbbn</name>
</term>
<term>
<name>bnmbnmb</name>
</term>
<term>
<name>tyutyu</name>
</term>
<term>
<name>ghjghj</name>
</term>
<term>
<name>hjk</name>
</term>
...
</mode>
<mode>
<term>
<name>asdfd</name>
</term>
<term>
<name>vcbbn</name>
</term>
</mode>
...
我需要像这样做字母索引:
我从这里获取模板:链接文本
我的问题:每个人都mode
必须有自己的“字母索引”列表(对于单一模式,它可以完美运行)。
XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="no" encoding="windows-1251"/>
<xsl:for-each select="mode">
<xsl:call-template name="alphabetIndexTmpl">
<xsl:with-param name="key-name" select="'items-key'" />
...
</xsl:call-template>
</xsl:for-each>
<xsl:key name="items-key" match="term" use="substring(., 1, 1)" />
<xsl:template name="alphabetIndexTmpl">
<xsl:param name="key-name"/>
...
</xsl:template>
</xsl:stylesheet>
此代码无法正常工作。它必须像这样更正:
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="no" encoding="windows-1251"/>
<xsl:for-each select="mode">
<xsl:call-template name="alphabetIndexTmpl">
<xsl:with-param name="key-name" select="concat('items-key', position())" />
...
</xsl:call-template>
</xsl:for-each>
<xsl:key name="items-key1" match="mode[1]/term" use="substring(., 1, 1)" />
<xsl:key name="items-key2" match="mode[2]/term" use="substring(., 1, 1)" />
<xsl:key name="items-key3" match="mode[2]/term" use="substring(., 1, 1)" />
...
<xsl:template name="alphabetIndexTmpl">
<xsl:param name="key-name"/>
...
</xsl:template>
</xsl:stylesheet>
但这是一个非常错误的决定。
如何更优雅地解决这个问题?
Dimitre Novatchev,不要因为“不准确”而击败我,我放弃了我的武器))。