<xml>
<TimeCal Cal ="1">
<DateUse DateUse="2010-08-30"/>
<DateUse DateUse="2010-08-31"/>
<DateUse DateUse="2010-09-01"/>
<DayCode DayCode="Mon"/>
<DayCode DayCode="Tue"/>
<DayCode DayCode="Wed"/>
</TimeCal>
<TimeCal Cal="2">
<DateUse DateUse ="2010-09-01"/>
<DateUse DateUse ="2010-09-02"/>
<DateUse DateUse ="2010-09-06"/>
<DateUse DateUse ="2010-09-07"/>
<Day Day="Mon"/>
<Day Day="Tue"/>
<Day Day="Wed"/>
<Day Day="Thu"/>
</TimeCal>
<TimeCal Cal="3">
<DateUse DateUse ="2010-09-03"/>
<DateUse DateUse ="2010-09-10"/>
<DateUse DateUse ="2010-09-01"/>
<Day Day="Fri"/>
</TimeCal>
<TimeCal Cal="4">
<DateUse DateUse ="2010-08-29"/>
<DateUse DateUse ="2010-09-05"/>
<DateUse DateUse ="2010-09-01"/>
<Day Day="Sun"/>
</TimeCal>
<TimeCal Cal="5">
<DateUse DateUse ="2010-09-04"/>
<DateUse DateUse ="2010-09-11"/>
<DateUse DateUse ="2010-09-02"/>
<Day Day="Sat"/>
</TimeCal>
</xml>
我想要的输出
DateUse Cals
---------------- ----------------
2010-08-30 1
2010-08-31 1
2010-09-01 1, 2, 3, 4
2010-09-02 2, 5
2010-09-03 3
2010-09-04 5
等等
假设输出(xml)为step1,现在step2从step1结果
输出如下答案 0 :(得分:0)
<xsl:for-each-group>
正是您要找的元素。以下代码基本上输出你想要的,但是以xml格式。将格式更改为文本很简单:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<text>
<xsl:for-each-group select="//TimeCal" group-by="DateUse/@DateUse">
<row>
<date><xsl:value-of select="current-grouping-key()"/></date>
<xsl:for-each select="current-group()">
<calID><xsl:value-of select="@Cal"/></calID>
</xsl:for-each>
</row>
</xsl:for-each-group>
</text>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
这是一个带格式化的XSLT 1.0解决方案
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="text" indent="no" omit-xml-declaration="yes" />
<xsl:strip-space elements="*"/>
<xsl:template match="/xml/TimeCal/DateUse">
<xsl:variable name="dateUse" select="@DateUse"/>
<xsl:choose>
<xsl:when test="not(preceding::DateUse[@DateUse=$dateUse])">
<xsl:text>
</xsl:text><xsl:value-of select="$dateUse"/>
<xsl:text>	</xsl:text>
<xsl:apply-templates select="//TimeCal[DateUse/@DateUse=$dateUse]" mode="distinct"/>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template match="TimeCal" mode="distinct">
<xsl:value-of select="@Cal"/>
<xsl:text>,</xsl:text>
</xsl:template>
</xsl:stylesheet>