我的 XSLT 按字母顺序对姓氏进行排序,但我只是注意到一些名字以“de”和“von”或“van”开头。这些小写前缀被排序并放置在大写名称之后。我如何告诉 XSLT 将所有案例一起排序?
使用 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="xml" indent="yes"/>
<xsl:template match="Data">
<xsl:strip-space elements="*"/>
<xsl:template match="Data">
<xsl:copy>
<xsl:apply-templates select="Consultant">
<xsl:sort select="Surname" order="ascending" />
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="Consultant">
<consultant><Surname><xsl:value-of select="Surname"/></Surname>
<FirstName><xsl:value-of select="FirstName"/></FirstName>
<!--…-->
</consultant>
</xsl:template>
</xsl:stylesheet>
这是一些示例 XML:
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<consultant>
<Surname>Arnon</Surname>
<FirstName>Lana</FirstName>
</consultant>
<consultant>
<Surname>von Armon</Surname>
<FirstName>George</FirstName>
</consultant>
<consultant>
<Surname>Arnon</Surname>
<FirstName>Lana</FirstName>
</consultant>
<consultant>
<Surname>de Armon</Surname>
<FirstName>George</FirstName>
</consultant>
</Data>
最佳答案
您需要规范化 <xsl:sort/>
中的大小写
如果您的环境支持 XPATH 2.0,那么您可以使用 upper-case() 或 lower-case(),如下所示:
<xsl:sort select="upper-case(Surname)" order="ascending" />
如果您的环境不支持 XPATH 2.0,那么您将需要像下面这样使用 translate():
<xsl:sort select="translate(Surname, 'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')" order="ascending" />
关于xml - XSL Sort 将小写字母与大写字母分开处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22018606/