所以我想做的是从 xml 中获取日期中所有唯一的年份,然后遍历年份以获取该年份的所有结果。下面的代码可以工作到一定程度,但目前它只返回唯一的完整日期,因为我无法弄清楚如何通过日期字符串的一部分(前四个字符,例如 2012)获取唯一值。我想在 xpath 中使用子字符串,但我尝试过的一切似乎都失败了。有谁知道我应该在这里做什么?
所以我想要返回的第一个结果是这些值 2012,2011,2010。
这是我在下面使用的代码 - 使用 xslt 1.0。我对使用 xslt 比较陌生,所以我可能会遗漏一些简单的东西......
<!-- key at top of document -->
<xsl:key name="product" match="gdr:CompanyHistory/gdr:Event/gdr:Date" use="." />
<xsl:for-each select="gdr:CompanyHistory/gdr:Event/gdr:Date[generate-id()=generate-id(key('product',.)[1])]">
<strong>Year = <xsl:value-of select="substring(., 1, 4)"/></strong>
<ul>
<xsl:variable name="Date" select="."/>
<!-- foreach year get all results that have dates in that year. -->
<xsl:for-each select="gdr:CompanyHistory/gdr:Event[substring(gdr:Date, 1, 4) = $Date]">
<li><xsl:value-of select="gdr:Description" /> - <xsl:value-of select="gdr:Date" /></li>
</xsl:for-each>
</ul>
</xsl:for-each>
xml
<CompanyHistory>
<Event>
<Date>2012-02-16T00:00:00</Date>
<Description>description</Description>
</Event>
<Event>
<Date>2012-02-01T00:00:00</Date>
<Description>description</Description>
</Event>
<Event>
<Date>2011-03-01T00:00:00</Date>
<Description>description</Description>
</Event>
<Event>
<Date>2011-04-01T00:00:00</Date>
<Description>description</Description>
</Event>
<Event>
<Date>2010-01-26T00:00:00</Date>
<Description>description</Description>
</Event>
<Event>
<Date>2010-01-16T00:00:00</Date>
<Description>description</Description>
</Event>
</CompanyHistory>
我希望这有点道理。注意:我缩短了完整的 xpath 以使其更具可读性。