【问题标题】:Ignoring special symbols in xsl:sort忽略 xsl:sort 中的特殊符号
【发布时间】:2013-06-10 07:37:49
【问题描述】:

我有问题。 有一些项目,包含这样的术语:

<term>Emploee's earnings...</term>
<term>Emploee Withholdings...</term>
<term>...value of an...</term>
<term>...value of a...</term>

按照逻辑,“an”冠词应该在“a”之后。此外,“员工”应该在“员工”之后。 问题是如何使用 xsl:sort 来做到这一点? 非常感谢!

【问题讨论】:

    标签: xml xslt xslt-1.0


    【解决方案1】:

    我真的不明白你的问题是什么。 在 :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(),"&apos;", "")'/>
    </xsl:apply-templates>
    

    【讨论】:

    • 这个答案是部分解决了问题,但是单词的复数形式在前。例如,在排序输出中,“利息收入倍数”排在“货币时间价值”之前。
    【解决方案2】:

    我认为您会发现真正的自然语言排序(例如,在忽略首字母“The”或“A”的情况下对书名进行排序的级别)超出了大多数 XSLT 引擎的能力 - 并且对于重要的是,大多数通用排序实用程序。这是因为它非常依赖于应用程序。例如,检查您的电话簿如何对“McMillan”和“Macmillan”进行排序。

    如果您可以编写一个规范化数据的函数(例如,通过删除不需要的前导定冠词或不定冠词),那么在 XSLT 2.0 中,您可以在 xsl:sort 的 select 属性中调用此函数以在排序之前规范化键.

    【讨论】:

    • 除非您能提供精确的规范,否则我不会尝试比上述一般大纲更精确的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    相关资源
    最近更新 更多