我正在尝试为我正在使用XSLT的项目构建一个Last Name目录。这就是我最终想要的样子。我希望XSLT为部分搜索选择索引分组,它显示该人姓氏的第一个字母,并且我希望它根据人名的第一个字母按结果中的每个部分进行分组。
请参阅下面的示例。
搜索:A C F G J
A
安德森
安卓
艾里
C
查尔斯
˚F
弗雷德里克斯
直率
盖瑞特
Ĵ
约翰逊
詹姆斯
我已经尝试过Muenchian分组,让这个人的姓氏的第一个首字母在相应的字母下面(即A部分Anderson,安德鲁斯,Allison ...... J Johnson James)并且工作正常。
使用相同的代码,我尝试将其应用于该部分以生成Search By A C F G J,其中我想根据XML中的数据显示该人姓氏的第一个字母。尝试使用代码时,我没有得到任何结果。
有人可以帮忙吗? 感谢
干杯
更新
OP希望转换此输入文档......
<people>
<person><lastname>Johnson</lastname></person>
<person><lastname>James</lastname></person>
<person><lastname>Charles</lastname></person>
<person><lastname>Franks</lastname></person>
<person><lastname>Anderson</lastname></person>
<person><lastname>Allison</lastname></person>
<person><lastname>Fredericks</lastname></person>
<person><lastname>Andrews</lastname></person>
</people>
...使用XSLT进入上面显示的文本格式化输出文档。目前尚不清楚OP是否使用XSLT 1.0或2.0。搜索字母作为样式表参数提供给样式表,格式为空格分隔的大写字母列表,如此声明...
<xsl:param name="search-by" select="'A C F G J'" />
您可以假设这些字母已按字母顺序排序,并且限制为大写。
答案 0 :(得分:0)
如果您按参数提供按字母排序,则不需要muenchian分组。
这个XSLT 1.0样式表...
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:param name="search-by" select="'A C F G J'" />
<xsl:key name="section" match="person" use="substring( lastname, 1, 1)" />
<xsl:template match="/">
Search by: <xsl:value-of select="$search-by" /><xsl:value-of select="'

'" />
<xsl:call-template name="do-section">
<xsl:with-param name="sections" select="$search-by" />
</xsl:call-template>
</xsl:template>
<xsl:template name="do-section">
<xsl:param name="sections" />
<xsl:if test="$sections != ''" >
<xsl:variable name="letter" select="substring($sections,1,1)" />
<xsl:value-of select="concat( $letter, '

')" />
<xsl:for-each select="key('section',$letter)">
<xsl:sort data-type="text" />
<xsl:value-of select="concat( lastname, '
')" />
</xsl:for-each>
<xsl:value-of select="'
'" />
<xsl:call-template name="do-section">
<xsl:with-param name="sections" select="substring($sections,3)" />
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
...应用输入样式表参数$ search-by ='A C F G J'并应用于此输入文档......
<people>
<person><lastname>Johnson</lastname></person>
<person><lastname>James</lastname></person>
<person><lastname>Charles</lastname></person>
<person><lastname>Franks</lastname></person>
<person><lastname>Anderson</lastname></person>
<person><lastname>Allison</lastname></person>
<person><lastname>Fredericks</lastname></person>
<person><lastname>Andrews</lastname></person>
</people>
...制作此文本文件......
Search by: A C F G J
A
Allison
Anderson
Andrews
C
Charles
F
Franks
Fredericks
G
J
James
Johnson