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

发布于 2025-01-09 11:16:35 字数 1100 浏览 0 评论 0原文

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

所以我想编写一个 XPath 3.0 查询来从每个中提取所有名称,但如果有多个使用相同的 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>

First time I'm posting here myself instead of searching for existing answers. Wanted to try it out in case my demand for more specific questions increases.

So I want to write an XPath 3.0 query to extract all the names from each <Flow>, but if there is multiple <Flow> with the same ID, I only want to return the name of the one with the more recent date, <Published>.

My XML looks like this:

<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>

And I want the following output:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

断舍离 2025-01-16 11:16:35

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

this would return all the names, where the date equals the max for a given 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

note, that in case there are multiple Flow elements with the same ID, and the max date, it would return all of them

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文