我有一个带有很长标签列表的XML代码,我想列出其标签中的每个值,以及它们各自的"形式"属性值。 ALL DISTINCTS
答案 0 :(得分:2)
每当你想到"不同的价值观"在XSLT 1.0中,思考"键"和Muenchian分组。
示例:
XML输入
<messages>
<text>
<corr form="Hello">Helo</corr> I'll see you next <corr form="week">wk</corr>.
</text>
<text>
<corr form="Hello">ello</corr>, are you ready <corr form="for">forr</corr> this <corr form="week">weeeek</corr> end?
</text>
<text>
<corr form="Hello">ello</corr> again!
</text>
</messages>
XSLT 1.0
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="forms" match="corr" use="@form"/>
<xsl:key name="values" match="corr" use="normalize-space(.)"/>
<xsl:template match="/*">
<html>
<table>
<xsl:for-each select="//corr[generate-id(.)=generate-id(key('forms',@form))]">
<tr>
<td>
<xsl:value-of select="@form"/>
</td>
<td>
<xsl:apply-templates select="key('forms',@form)[generate-id(.)=generate-id(key('values',normalize-space(.)))]"/>
</td>
</tr>
</xsl:for-each>
</table>
</html>
</xsl:template>
<xsl:template match="corr">
<xsl:if test="position() != 1">, </xsl:if>
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
<html>
<table>
<tr>
<td>Hello</td>
<td>Helo, ello</td>
</tr>
<tr>
<td>week</td>
<td>wk, weeeek</td>
</tr>
<tr>
<td>for</td>
<td>forr</td>
</tr>
</table>
</html>