如何使用XPath 3.0查找每个非唯一ID的最新日期



这是我第一次自己在这里发帖,而不是搜索现有的答案。我想尝试一下,以防我对更具体问题的需求增加。

因此,我想编写一个XPath 3.0查询,从每个<流量>,但是如果存在多个<流量>对于相同的ID,我只想返回具有最近日期的ID的名称,<已发布>。

我的XML如下所示:

<Flows>
<Flow>
<ID>172</ID>
<Name>Name 1 version 1</Name>
<Published>2021-09-30</Published>
</Flow>
<Flow>
<ID>172</ID>
<Name>Name 1 version 2</Name>
<Published>2022-01-15</Published>
</Flow>
<Flow>
<ID>287</ID>
<Name>Name 2 version 1</Name>
<Published>2022-01-14</Published>
</Flow>
<Flow>
<ID>9</ID>
<Name>Name 3 version 1</Name>
<Published>2021-10-15</Published>
</Flow>
</Flows>

我想要以下输出:

<Name>Name 1 version 2</Name>
<Name>Name 2 version 1</Name>
<Name>Name 3 version 1</Name>

这将返回所有名称,其中日期等于给定ID 的最大值

let $maxDate := function($flows as element(Flows),$id as xs:integer) as xs:date {
max($flows/Flow[ID = $id]/Published/xs:date(.)) 
}
return //Flow[Published/xs:date(.) eq $maxDate(/Flows,./ID/.)]/Name

注意,如果有多个Flow元素具有相同的ID和最大日期,它将返回所有

最新更新