gpt4 book ai didi

xml - 如何使用 XPath 选择最新/最新(基于时间戳)的 N 个元素?

转载 作者:数据小太阳 更新时间:2023-10-29 02:45:25 25 4
gpt4 key购买 nike

我有以下示例 xml:

  <datas>
<data>
<id>1</id>
<timestamp>2013-01-19T14:20:01.000+02:00</timestamp>
</data>
<data>
<id>2</id>
<timestamp>2013-09-13T14:52:34.000+02:00</timestamp>
</data>
<data>
<id>3</id>
<timestamp>2013-10-02T12:47:47.000+02:00</timestamp>
</data>
<data>
<id>4</id>
<timestamp>2013-10-23T14:52:08.000+02:00</timestamp>
</data>
<data>
<id>5</id>
<timestamp>2013-07-23T14:55:20.000+02:00</timestamp>
</data>
<data>
<id>6</id>
<timestamp>2013-10-02T12:44:24.000+02:00</timestamp>
</data>
</datas>

我可以使用以下 xpath 获取最后 3 个元素://data[position()>last()-3]/*:id,','这将返回 id:4,5,6

我需要的是获取 3 个具有最新(最大)时间戳的元素。我可以使用 max 函数来获取最新元素(但我想要 n=3 个最新元素)- id 为 3、4、6 的 t.i 元素。

仅使用 xpath 是否可行?我使用 XPath 2.0。

最佳答案

这是一个纯 XPath 解决方案,它有点脏,但它可以完成工作:

<ul>
<xsl:for-each select="datas/data">
<xsl:sort select="translate(translate(translate(translate(translate(timestamp,'-',''),':',''),'.',''),'+',''),'T','')" data-type="number" order="descending" />
<xsl:if test="position() &lt; 4">
<li>
<xsl:value-of select="id" /> -
<xsl:value-of select="timestamp" />
</li>
</xsl:if>
</xsl:for-each>
</ul>

首先,您使用 translate() 从时间戳中删除非数字字符,这有效地将其转换为易于排序的数字。

然后您对列表进行排序并仅输出前 3 项。

输出如下:

4 - 2013-10-23T14:52:08.000+02:00
3 - 2013-10-02T12:47:47.000+02:00
6 - 2013-10-02T12:44:24.000+02:00

这是使用 .Net 中内置的 XSLT 转换进行测试的。它使用 XPath 1.0。

关于xml - 如何使用 XPath 选择最新/最新(基于时间戳)的 N 个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19592776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com