我的XML有点类似于下面显示的内容。我必须找到独特的类别。 XSLT 2.0中有很多简单的方法。但我不得不坚持1.0 :(。经过几次斗争,我找到了解决办法。我想分享。可能会帮助别人。请改进我的答案。我很感激。
<root>
<category>
this is Games category
</category>
<category>
this is Books category
</category>
<category>
this is Food category
</category>
<category>
this is Games category
</category>
<category>
this is Books category
</category>
<category>
this is Food category
</category>
<category>
this is Travel category
</category>
<category>
this is Travel category
</category>
</root>
解。我在答案部分添加了。感谢。
答案 0 :(得分:0)
<强>解决方案强>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:variable name="test">
<xsl:call-template name="delimitedvalues">
<xsl:with-param name="paramvalues" select="//category" />
</xsl:call-template>
</xsl:variable>
<xsl:call-template name="distinctvalues">
<xsl:with-param name="values" select="$test" />
</xsl:call-template>
</xsl:template>
<xsl:template name="distinctvalues">
<xsl:param name="values"/>
<xsl:variable name="firstvalue" select="substring-before($values, ',')"/>
<xsl:variable name="restofvalue" select="substring-after($values, ',')"/>
<xsl:if test="contains($values, ',') = false">
<xsl:value-of select="$values"/>
</xsl:if>
<xsl:if test="contains($restofvalue, $firstvalue) = false">
<xsl:value-of select="$firstvalue"/>
<xsl:text>,</xsl:text>
</xsl:if>
<xsl:if test="$restofvalue != ''">
<xsl:call-template name="distinctvalues">
<xsl:with-param name="values" select="$restofvalue" />
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="delimitedvalues">
<xsl:param name="paramvalues" />
<xsl:value-of select="substring-before(substring-after($paramvalues,'this is '),' category')"/>
<xsl:if test="$paramvalues/following::category">
<xsl:text>,</xsl:text>
<xsl:call-template name="delimitedvalues">
<xsl:with-param name="paramvalues" select="$paramvalues/following::category" />
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<强>输出强>
Games,Books,Food,Travel
源代码
http://www.xsltcake.com/slices/0iWpyI