如何使用 XPath 3.0 查找每个非唯一 ID 的最新日期?
How do I use XPath 3.0 to find the latest date of each non-unique ID?
我第一次自己在这里发帖,而不是搜索现有答案。想尝试一下,以防我对更具体问题的需求增加。
所以我想写一个 XPath 3.0 查询来从每个 中提取所有名称,但是如果有多个具有相同 ID 的 ,我只想 return日期较近的那个,。
我的 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>
这将 return 所有名称,其中日期等于给定 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
请注意,如果有多个具有相同 ID 和最大日期的流元素,它将 return 所有元素
我第一次自己在这里发帖,而不是搜索现有答案。想尝试一下,以防我对更具体问题的需求增加。
所以我想写一个 XPath 3.0 查询来从每个
我的 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>
这将 return 所有名称,其中日期等于给定 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
请注意,如果有多个具有相同 ID 和最大日期的流元素,它将 return 所有元素