1

这是我在这里遇到的一个较老问题的延续,Michael Kay 提供了一个很棒的 XQuery 解决方案来对我的 xml 文件进行排序。但是,我现在希望使用相同的代码并让它在排序时忽略“The”作为名称中的第一个单词,但不将其从文件中删除。
这是迈克尔提供的代码:

    <items>{
      for $i in //item order by $i/name return $i
    }</items>

很长一段时间以来,我一直在谷歌上搜索死亡。当“The”用作标题或名称中的第一个单词时,我什至无法弄清楚正确的术语是什么。它必须有一个名字lol。再次感谢团队的任何帮助。感谢你们提供的所有帮助。

4

2 回答 2

3

作为 Joe 建议的替代方案,您还可以将replace函数与模式一起使用'^The ',因为它只匹配The字符串的开头:

for $i in //item order by replace($i/name, '^The ', '') return $i
于 2019-04-06T17:59:26.823 回答
3

要忽略标题中的“The”,只需添加一个带有调整后标题的新变量,并在您的order by子句中使用它:

<items>{
    for $i in //item 
    let $name-sort-key := 
        if (starts-with($i/name, "The ")) then
            substring-after($i/name, "The ")
        else
            $i/name
    order by $name-sort-key
    return 
        $i
}</items>
于 2019-04-06T17:42:15.343 回答