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

标签 xml sorting xslt xslt-1.0

我的 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/

相关文章:

java - 如何使用java创建xml?

c# - 删除序列化程序创建的空 xmlns

mysql - 从连接或子查询中选择记录作为列(子数组)

javascript - JS中对象的频率排序数组,如果频率匹配则根据对象属性排序

javascript - XSLT 和 MathJax

xml - 如何使用 XSL 转换器仅翻译选定的 XML 元素

java - 使用函数隐藏所有相对布局,我们选择的除外

algorithm - 哪种k-merge排序在外部排序中效率会更高

xml - 使用 XSLT 自动创建 xml 元素

xml - 如何从 apache spark 框架读取 XML 文件?