我有个问题。有一些项目,包含这样的术语:
<term>Emploee's earnings...</term>
<term>Emploee Withholdings...</term>
<term>...value of an...</term>
<term>...value of a...</term>
按照逻辑,“an”冠词应该在“a”之后。此外,“员工”应该在“员工”之后。问题是如何使用 xsl:sort 来做到这一点?非常感谢!
我真的不明白你的问题是什么。在 :apply-templates(或 for-each)中使用 xsl:sort 应该按需要进行排序。
<xsl:apply-templates select="term" >
<xsl:sort select="text()"/>
</xsl:apply-templates>
要适应特定语言的处理,您可以添加“lang”属性。如果您想忽略某些字符,可以使用translate()
.
忽略撇号的示例(此处不需要):
<xsl:apply-templates select="term" >
<xsl:sort select='translate(text(),"'", "")'/>
</xsl:apply-templates>
我认为您会发现真正的自然语言排序,例如在忽略初始“The”或“A”对书籍标题进行排序的级别上,超出了大多数 XSLT 引擎的能力 - 就此而言,最通用的排序实用程序。这是因为它非常依赖于应用程序。例如,检查您的电话簿如何对“McMillan”和“Macmillan”进行排序。
如果您可以编写一个规范化数据的函数(例如,通过删除不需要的前导定冠词或不定冠词),那么在 XSLT 2.0 中,您可以在 xsl:sort 的 select 属性中调用此函数以在排序之前规范化键。