我有一个问题。有些项目包含如下条款:
<term>Emploee's earnings...</term>
<term>Emploee Withholdings...</term>
<term>...value of an...</term>
<term>...value of a...</term>
根据逻辑,"an"冠词应该在"a"之后。另外,"employee’s"应该在"employee"之后。问题是如何使用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"one_answers"Macmillan"进行排序。
如果您可以编写一个函数来规范化数据(例如,通过删除不需要的前导定冠词或不定冠词),那么在XSLT 2.0中,您可以在xsl:sort的select属性中调用该函数,以便在排序之前对键进行规范化。