删除重复项并在XSLT中从逗号分隔的字符串中排序

时间:2014-01-16 00:04:09

标签: xslt

我在XSLT中有一个名为“Tags”的变量,它是逗号分隔值。 例如 测试中,2013,2013,买家,借此清理,, 2013,时尚,,,食品,测试,孩子,娱乐,媒体,音乐,单位,人物,音乐,重用,, 2013,微博食品

清理此变量的最佳方法是什么,因此没有重复项,并按字母顺序排序。

我可以将它与分割功能结合起来,如果这有帮助的话,这是工作的下一部分。

提前致谢

LMT

1 个答案:

答案 0 :(得分:1)

使用XSLT 2.0,这非常方便:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="2.0" xmlns:myfn="MY:FN" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xsl:output method="text"/>

  <xsl:function name="myfn:sortCSV" as="xs:string*">
    <xsl:param name="csvString" as="xs:string"/>

    <!-- Split up string and remove duplicates -->
    <xsl:variable name="values" select="distinct-values(tokenize($csvString, '\s*,\s*'))" as="xs:string*"/>
    <!-- Return all elements, sorted -->
    <xsl:for-each select="$values">
      <xsl:sort/>
      <!-- We don't return empty strings -->
      <xsl:sequence select=".[.!='']"/>
    </xsl:for-each>
  </xsl:function>

  <xsl:template match="/">
    <!-- Let's test our function -->
    <xsl:value-of select="myfn:sortCSV('x,b , c,, d,c  ,a,d')" separator=","/>
  </xsl:template>
</xsl:stylesheet>

使用XSLT 1.0,你几乎没有运气。这种任务会复杂得多。