我需要按键值保留输入xml分组中的最新条目。可以用xsl 2.0实现吗?输入
<root>
<line>
<date>2021-01-01T00:00:00</date>
<field1>AAA</field1>
<field2>1</field2>
</line>
<line>
<date>2021-01-01T23:00:00</date>
<field1>BBB</field1>
<field2>1</field2>
</line>
<line>
<date>2021-01-02T00:00:00</date>
<field1>CCC</field1>
<field2>2</field2>
</line>
<root>
<line>
<date>2021-01-01T23:00:00</date>
<field1>BBB</field1>
<field2>1</field2>
</line>
<line>
<date>2021-01-02T00:00:00</date>
<field1>CCC</field1>
<field2>2</field2>
</line>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:template match="/">
<xsl:for-each-group select="root/line" group-by="field2">
<xsl:sort select="date"/>
<line>
<xsl:copy-of select="node()"/>
</line>
</xsl:for-each-group>
</xsl:template>
尝试对组进行排序,而不是对每个组中的行进行排序。然后复制每个组中的第一个节点。
要通过排序来做到这一点,您需要做如下操作:
XSLT2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/root">
<xsl:copy>
<xsl:for-each-group select="line" group-by="field2">
<xsl:variable name="sorted-group">
<xsl:perform-sort select="current-group()">
<xsl:sort select="date" order="descending"/>
</xsl:perform-sort>
</xsl:variable>
<xsl:copy-of select="$sorted-group/line[1]"/>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
请注意,这只会按降序复制第一行。如果有两行具有相同的日期,则仅将其中的第一行(按文档顺序)复制到输出中。
或者,您可以选择组中日期时间最长的行:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/root">
<xsl:copy>
<xsl:for-each-group select="line" group-by="field2">
<xsl:variable name="max-dateTime" select="max(current-group()/date/xs:dateTime(.))" />
<xsl:copy-of select="current-group()[date=$max-dateTime]"/>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
在这里,平局将通过复制两行来解决。
问题内容: 从下面的数据中,我需要使用SQL Server 2005为每个链接ID选择最接近指定日期的记录: 因此,使用01/10/2010选择它们应返回: 我知道这是有可能的,但似乎无法绕开我的头脑(必须太接近一天的结束了:P)如果有人可以帮助或朝正确的方向轻轻推一下,将不胜感激! 编辑: 另外我也遇到了这个sql以获取最接近的日期: 但无法弄清楚如何正确地整合到查询中… 谢谢 问题答案: 你可
type String(可选) - 以下之一: tasks - 此类别中的项目将被放置到标准的 Tasks 类别中。只能有一个这样的类别而且总是显示在跳转列表的底部。 frequent - 显示由应用程序频繁打开的文件的列表,类别的名称及其项目由Windows设置。 recent - 显示由应用程序最近打开的文件的列表,类别的名称及其项目由Windows设置。项目可以使用app.addRecent
问题内容: 我试图弄清楚如何将货币金额向上舍入至最接近的5美分。以下显示了我的预期结果 我需要结果的精度为2(如上所示)。 更新资料 按照下面的建议,我能做的就是 我不认为这是100%的原始数据-我担心在转换为双精度和从双精度转换时精度可能会丢失。但是,这是到目前为止我能想到的最好的方法,并且 似乎 可以解决。 问题答案: 您可以使用普通双精度来做到这一点。 编辑:对于负数,您需要减去0.5
问题内容: 我有一个清单: 如何将带有动态间隙的最近值分组,并创建这样的元组,最快的方法是什么?: 问题答案: 喜欢 首先,我们计算顺序元素之间的平均差异,然后将差异小于平均值的元素分组在一起。
问题内容: 我有一个看起来与此类似的表: 我该如何在Postgres中编写查询以仅返回按表中每个唯一字符分组的最新(按)行? 问题答案: 用途:
问题内容: 我需要将时间四舍五入到最接近的四分之一小时。时间是从MySQL数据库的datetime列中提取的,格式如。 例: 10:50必须是10:45 1:12必须是1:00 3:28必须是3:15 等等 我假设参与其中,但不确定如何去做。 谢谢 问题答案: 您的全部功能将是这样的…