字母索引模板:“xsl:key”匹配问题
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>
...
我需要像这样进行字母表索引:
我从这里获取模板: 链接文本
我的问题:对于每个模式
必须有自己的“字母表索引”列表(对于单一模式,它工作得很好)。
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>
但这是一个非常错误的决定。
如何更优雅地解决这个问题呢?
迪米特雷·诺瓦切夫,不要因为“不准确”而打倒我,我投降了我的武器))。
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>
...
I need to do Alphabet index like this:
I get template from here: link text
My problem: for each mode
there must be its own "Alphabet index" list (for single mode it works perfectly).
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>
This code does not work correctly.
It has to be corrected like this:
<?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>
But it is very crooked decision.
How to solve this problem more elegantly?
Dimitre Novatchev, do not beat me down for "inaccuracies", I surrender my arms)).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
此转换:
应用于此 XML 文档时:
为每个
生成所需的索引(无html 中的格式化正在完成):请注意: Muenchian 分组方法与包含模式位置和术语名称的复合键一起使用。
This transformation:
when applied on this XML document:
produces the wanted indexes for every
<mode>
(no formatization in html is being done):Do note: Muenchian method for grouping is used with a composite key that contains both the mode's position and the name of the term.
有了正确的输入:
此样式表:
输出:
注意:现在,您的键涉及
mode
元素祖先,因此您需要将其引用到您的键中。编辑:错过字母顺序。对不起。
With proper input:
This stylesheet:
Output:
Note: Now, your key involves the
mode
element ancestor, so you need to reference this into your key.EDIT: Miss the alfabetic order. Sorry.