XSLT专业知识需要重复值

时间:2016-01-03 05:25:15

标签: xslt

编辑问题,添加了更多信息

VIV:记号化= STR:标记化

VIV:value-of的STR =:value-of的

第1部分 - 声明和分配值

<declare name="searchhistories" />
<set-var name="searchhistories">
    <value-of select="concat(viv:value-of('searchquery','var'),'|',viv:replace(viv:value-of('searchhistory', 'var'),concat(viv:value-of('searchquery','var'),'\|'),'','g'))" />
  </set-var>

第2部分:标记化和重复数据删除

      <xsl:for-each select="viv:tokenize($searchhistories,'|',false, false)">
      <xsl:variable name="i" select="position()"/>
      <xsl:if test="$i &lt; 11">      
      <xsl:value-of select="." /> |
      </xsl:if>   
    </xsl:for-each>      

能够令牌化,但重复数据删除无法正常工作

重复数据删除的代码应该是什么

      <xsl:for-each select=***distinct-values***("viv:tokenize($searchhistories,'|',false, false)")>

这样的东西?

1 个答案:

答案 0 :(得分:0)

尝试

<xsl:for-each select="set:distinct(viv:tokenize($searchhistories,'|',false, false))">

使用样式表声明xmlns:set="http://exslt.org/sets"例如

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:set="http://exslt.org/sets" exclude-result-prefixes="set">

答案是基于您在评论中链接到的文档,我无法测试。

但是http://xsltransform.net/ej9EGcy使用了令牌化的EXSLT版本并且工作正常:

<xsl:template match="item">
    <xsl:copy>
        <xsl:for-each select="set:distinct(str:tokenize(., '|'))">
            <xsl:if test="position() > 1">|</xsl:if>
            <xsl:value-of select="."/>
        </xsl:for-each>
    </xsl:copy>
</xsl:template>