У меня есть следующий XML.
<word>
<lemma POS="глагол" Aspect="несвършен" Transitive= "непреходен">викам</lemma>
<morph>
<FiniteForm Tense="present" Person="1" Number="ед.ч.">викам</FiniteForm>
<FiniteForm Tense="present" Person="2" Number="ед.ч.">викаш</FiniteForm>
<FiniteForm Tense="present" Person="3" Number="ед.ч.">вика</FiniteForm>
<FiniteForm Tense="past_simple" Person="2" Number="ед.ч.">вика</FiniteForm>
<FiniteForm Tense="past_simple" Person="3" Number="ед.ч.">вика</FiniteForm>
<FiniteForm Tense="past_continues" Person="1" Number="ед.ч.">виках</FiniteForm>
<FiniteForm Tense="past_continues" Person="2" Number="ед.ч.">викаше</FiniteForm>
<FiniteForm Tense="past_continues" Person="3" Number="ед.ч.">викаше</FiniteForm>
</morph>
</word>
<word>
<lemma POS="глагол" Aspect="несвършен" Transitive= "непреходен">вървя</lemma>
<morph>
<FiniteForm Tense="present" Person="1" Number="ед.ч.">вървя</FiniteForm>
<FiniteForm Tense="present" Person="2" Number="ед.ч.">вървиш</FiniteForm>
<FiniteForm Tense="present" Person="3" Number="ед.ч.">вървят</FiniteForm>
<FiniteForm Tense="past_simple" Person="2" Number="ед.ч.">вървят</FiniteForm>
<FiniteForm Tense="past_simple" Person="3" Number="ед.ч.">вървя</FiniteForm>
<FiniteForm Tense="past_continues" Person="1" Number="ед.ч.">вървях</FiniteForm>
<FiniteForm Tense="past_continues" Person="2" Number="ед.ч.">вървеше</FiniteForm>
<FiniteForm Tense="past_continues" Person="3" Number="ед.ч.">вървеше</FiniteForm>
</morph>
</word>
Извините за кириллические символы.Я хочу сгруппировать это по FiniteForm @Tense для каждого слова.То, что я сейчас делаю, - это циклическое прохождение каждого слова.И выполняет мюнхенскую группировку.Проблема в том, что мой ключ фактически соответствует каждой FiniteForm, и я хочу, чтобы он совпадал только с теми тегами FiniteForm внутри тега слова, в котором я нахожусь.
Вот как я сейчас создаю ключ.
<xsl:key name="finiteFormsByTense" match="FiniteForm" use="@Tense" />
И это то, что я делаю.
<xsl:for-each select="word">
<xsl:for-each select="morph/FiniteForm[generate-id() = generate-id(key('finiteFormsByTense', @Tense)[1])]">
<xsl:variable name="current-grouping-key" select="@Tense"/>
<xsl:variable name="current-group" select="key('finiteFormsByTense', $current-grouping-key)"/>
<xsl:variable select="count($current-group)+1" name="groupSize"/>
<tr>
<td rowspan="{$groupSize}">
<xsl:value-of select="$current-grouping-
</td>
</tr>
<xsl:for-each select="$current-group">
<tr>
<td><xsl:value-of select="@Person"/></td>
<td><xsl:value-of select="@Number"/></td>
<td><xsl:value-of select="."/></td>
</tr>
</xsl:for-each>
</xsl:for-each>