【问题标题】:Is there a way in XPath 3.1 (not XQuery) to sort the results?XPath 3.1(不是 XQuery)中有没有办法对结果进行排序?
【发布时间】:2020-07-16 19:08:07
【问题描述】:

I've looked through the spec 找不到任何东西。但我认为 3.1 支持排序。

更新(抱歉,我倾向于假设人们可以读懂我的想法,但我没有列出足够的细节):

我们在 Java 中这样做,所以我们调用:

XPathCompiler.compile(query);
XPathExecutable.load()

所以我们的查询通常是“/root/employees/employee”来获取所有员工的列表 (from Southwind.xml)。

用 SQL 术语来说,我们希望让我们的用户能够执行以下操作:

"/root/employees/employee 按姓氏降序,名字升序排列"。

根据下面的答案,我如何在 Java 代码中传递这个? I see this example,但我不认为是 Java 代码(如果是,我不懂语法)。

而且,它可以在多个节点上排序(即,如果姓氏相等,则按名字排序)?

Put in a more detailed question with sample code here.

【问题讨论】:

  • 您必须将所需的排序键和方向作为参数传递给转换。如何将参数传递给转换取决于实现,并且从一个 XSLT 处理器到另一个不同。请阅读您正在使用的 XSLT 处理器的文档。

标签: xml xpath xpath-3.1


【解决方案1】:

是的,请参阅XPath and XQuery Functions and Operators 3.1 中的fn:sort

总结

根据作为函数提供的排序键的值对提供的序列进行排序。

签名

fn:sort($input as item()*) as item()*

fn:sort($input as item()*, $collation as xs:string?) as item()*

fn:sort($input     as item()*,
        $collation as xs:string?,
        $key       as function(item()) as xs:anyAtomicType*) as item()*

[...]

示例

表达式fn:sort((1, 4, 6, 5, 3)) 返回(1, 3, 4, 5, 6)

[...]

【讨论】:

  • 我根据您的回答更新了我的问题。我认为 fn:sort 是我需要的,但不知道如何在 Java 中调用它。 TIA。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 2013-11-16
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
相关资源
最近更新 更多