0

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

所以我想编写一个 XPath 3.0 查询来从每个 <Flow> 中提取所有名称,但是如果有多个具有相同 ID 的 <Flow>,我只想返回日期较近的一个的名称,<发表>。

我的 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>
4

1 回答 1

0

这将返回所有名称,其中日期等于给定 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 和最大日期,它将返回所有元素

于 2022-02-22T22:47:38.660 回答