XSL Sort 将小写字母与大写字母分开处理

Jim*_*ald 4 xml sorting xslt xslt-1.0

我的 XSLT 按字母顺序对姓氏进行排序,但我刚刚注意到有些名字以“de”和“von”或“van”开头。这些小写前缀将被排序并放置在大写名称之后。如何告诉 XSLT 将所有案例排序在一起?

\n\n

使用 XSLT 1.0

\n\n

这是对数据进行排序的部分:

\n\n
<?xml version="1.0" encoding="UTF-8"?>\n<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">\n<xsl:output method="xml" indent="yes"/>\n\n<xsl:template match="Data">\n<xsl:strip-space elements="*"/>\n<xsl:template match="Data">\n<xsl:copy>\n<xsl:apply-templates select="Consultant">\n<xsl:sort select="Surname" order="ascending" />\n</xsl:apply-templates>\n</xsl:copy>\n</xsl:template>  \n<xsl:template match="Consultant">\n<consultant><Surname><xsl:value-of select="Surname"/></Surname>\n<FirstName><xsl:value-of select="FirstName"/></FirstName>\n<!--\xe2\x80\xa6-->\n</consultant>\n</xsl:template>\n</xsl:stylesheet>\n
Run Code Online (Sandbox Code Playgroud)\n\n

下面是一些 XML 示例:

\n\n
<?xml version="1.0" encoding="UTF-8"?>\n<Data>\n<consultant>\n<Surname>Arnon</Surname>\n<FirstName>Lana</FirstName>\n</consultant>\n<consultant>\n<Surname>von Armon</Surname>\n<FirstName>George</FirstName>\n</consultant>\n<consultant>\n<Surname>Arnon</Surname>\n<FirstName>Lana</FirstName>\n</consultant>\n<consultant>\n<Surname>de Armon</Surname>\n<FirstName>George</FirstName>\n</consultant>\n</Data>\n
Run Code Online (Sandbox Code Playgroud)\n

小智 5

您需要将案例标准化<xsl:sort/>

如果您的环境支持 XPATH 2.0,那么您可以使用 upper-case() 或 lower-case(),如下所示:

<xsl:sort select="upper-case(Surname)" order="ascending" />
Run Code Online (Sandbox Code Playgroud)

如果您的环境不支持 XPATH 2.0,那么您将需要使用translate(),如下所示:

<xsl:sort select="translate(Surname, 'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')" order="ascending" />
Run Code Online (Sandbox Code Playgroud)