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>\nRun 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>\nRun 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)