XSLT 对具有不同日期的重复元素更具体地使用序列 select
XSLT more specific use of sequence select for duplicate elements with different dates
我有一个 XSL 2.0 版可以使用 <xsl:sequence>
删除重复项。我只是根据 ID 从下面的 xml 中删除重复的 Entry 元素。此外,我需要考虑日期字段并删除旧的。或者,我可以删除不是当前日期的条目,因为新条目始终标记为当前日期。在这种情况下,删除日期为 2016-09-01(粗体)的 ID ace 条目。请记住,无论日期如何,我都不想删除不是复制品的条目。
<?xml version='1.0' encoding='utf-8'?>
<Data>
<Entry>
<ID>aces</ID>
<Info>
<Code2>0006</Code2>
<AMOUNT>7.52<AMOUNT>
<Info>
<Date>2016-12-18-05:00</Date>
</Entry>
<Entry>
<ID>chawk</ID>
<Info>
<Code2>0007</Code2>
<AMOUNT>7.53<AMOUNT>
<Info>
<Date>2016-11-01-05:00</Date>
</Entry>
**<Entry>
<ID>aces</ID>
<Info>
<Code2>0006</Code2>
<AMOUNT>7.53<AMOUNT>
<Info>
<Date>2016-09-01-05:00</Date>
</Entry>**
</Data>
这是我当前的 XSL:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<Data xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:for-each-group select="Entry" group-by="ID">
<xsl:sequence select="."/>
</xsl:for-each-group>
</Data>
</xsl:template>
</xsl:stylesheet>
在此先感谢您的帮助。
按日期对组中的项目进行排序,只输出最新的项目(升序排在最后或降序排在第一):
<xsl:template match="/*">
<Data xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:for-each-group select="Entry" group-by="ID">
<xsl:for-each select="current-group()">
<xsl:sort select="Date" order="descending"/>
<xsl:if test="position() eq 1">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:for-each-group>
</Data>
</xsl:template>
我有一个 XSL 2.0 版可以使用 <xsl:sequence>
删除重复项。我只是根据 ID 从下面的 xml 中删除重复的 Entry 元素。此外,我需要考虑日期字段并删除旧的。或者,我可以删除不是当前日期的条目,因为新条目始终标记为当前日期。在这种情况下,删除日期为 2016-09-01(粗体)的 ID ace 条目。请记住,无论日期如何,我都不想删除不是复制品的条目。
<?xml version='1.0' encoding='utf-8'?>
<Data>
<Entry>
<ID>aces</ID>
<Info>
<Code2>0006</Code2>
<AMOUNT>7.52<AMOUNT>
<Info>
<Date>2016-12-18-05:00</Date>
</Entry>
<Entry>
<ID>chawk</ID>
<Info>
<Code2>0007</Code2>
<AMOUNT>7.53<AMOUNT>
<Info>
<Date>2016-11-01-05:00</Date>
</Entry>
**<Entry>
<ID>aces</ID>
<Info>
<Code2>0006</Code2>
<AMOUNT>7.53<AMOUNT>
<Info>
<Date>2016-09-01-05:00</Date>
</Entry>**
</Data>
这是我当前的 XSL:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<Data xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:for-each-group select="Entry" group-by="ID">
<xsl:sequence select="."/>
</xsl:for-each-group>
</Data>
</xsl:template>
</xsl:stylesheet>
在此先感谢您的帮助。
按日期对组中的项目进行排序,只输出最新的项目(升序排在最后或降序排在第一):
<xsl:template match="/*">
<Data xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:for-each-group select="Entry" group-by="ID">
<xsl:for-each select="current-group()">
<xsl:sort select="Date" order="descending"/>
<xsl:if test="position() eq 1">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:for-each-group>
</Data>
</xsl:template>