这不是删除我在此论坛上发现的重复项的主题。
我有一个键/值映射,我想从映射的最终结果中删除重复项。
来源文件:
<article>
<subject code="T020-060"/>
<subject code="T020-010"/>
<subject code="T090"/>
</article>
映射:
<xsl:variable name="topicalMap">
<topic MapCode="T020-060">Value 1</topic>
<topic MapCode="T020-010">Value 1</topic>
<topic MapCode="T090">Value 3</topic>
</xsl:variable>
期望的结果:
<article>
<topic>Value 1</topic>
<topic>Value 3</topic>
</article>
XSLT我正在使用(注意,它有一个测试标签和代码,以确保映射有效):
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="xml" encoding="utf8" indent="yes" exclude-result-prefixes="#all"/>
<xsl:template match="article">
<article>
<xsl:for-each-group select="subject" group-by="$topicalMap/topic[@MapCode = @code]">
<test-group>
<code>Current code: <xsl:value-of select="@code"/></code>
<topic>Current keyword: <xsl:value-of
select="$topicalMap/topic[@MapCode = @code]"/></topic>
</test-group>
</xsl:for-each-group>
<simple-mapping><xsl:apply-templates/></simple-mapping>
</article>
</xsl:template>
<!-- Simple Mapping Topics -->
<xsl:template match="subject">
<xsl:variable name="ArticleCode" select="@code"/>
<topic>
<xsl:value-of select="$topicalMap/topic[@MapCode = $ArticleCode]"/>
</topic>
</xsl:template>
<!-- Keyword Map -->
<xsl:variable name="topicalMap">
<topic MapCode="T020-060">Value 1</topic>
<topic MapCode="T020-010">Value 1</topic>
<topic MapCode="T090">Value 3</topic>
</xsl:variable>
</xsl:stylesheet>
以这种方式进行分组不会产生任何结果。如果我复制源文档中的主题,并执行group-by =“@ code”,在应用映射之前将其删除。但我想删除结果重复值而不是重复键。
简单映射的东西就是显示工作代码。
答案 0 :(得分:2)
使用
<xsl:for-each-group select="subject" group-by="$topicalMap/topic[@MapCode = current()/@code]">
<topic>
<xsl:value-of select="current-grouping-key()"/>
</topic>
</xsl:for-each-group>
或更好
<xsl:key name="map" match="topic" use="@MapCode"/>
<xsl:template match="article">
<article>
<xsl:for-each-group select="subject" group-by="key('map', @code, $topicalMap)">
<topic>
<xsl:value-of select="current-grouping-key()"/>
</topic>
</xsl:for-each-group>
</article>
</xsl:template>