xslt完全删除字符串中的重复项

时间:2016-06-14 15:36:36

标签: html xslt-1.0

我有一个包含非数值的变量,我需要使用XSLT从该字符串中完全删除重复的条目:

$ string = a,b,c,c,d,d,e,f,g

需要成为:$ newstring = a,b,e,f,g

另一种选择是比较两个变量并忽略/删除重叠的条目。

$ stringA = a,c

$ stringB = a,b,c,d,e,f

需要成为: $ newstring = b,d,e,f

连接变量很简单,但我需要与之相反! 请帮忙,

1 个答案:

答案 0 :(得分:0)

XSLT旨在处理XML,而不是字符串。特别是XSLT 1.0是一个用于处理文本的糟糕工具。

恕我直言,这里继续进行的最佳方法是首先将问题转换为XML。如果你正在使用libxslt(就像xsltproc那样),使用扩展函数很容易做到:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:str="http://exslt.org/strings"
extension-element-prefixes="str">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:param name="stringA">a,c,g</xsl:param>
<xsl:param name="stringB">a,b,c,d,e,f</xsl:param>

<xsl:variable name="setA" select="str:tokenize($stringA, ',')" />
<xsl:variable name="setB" select="str:tokenize($stringB, ',')" />

<xsl:template match="/">
    <test>
        <xsl:for-each select="$setA[not(.=$setB)] | $setB[not(.=$setA)]">
            <xsl:value-of select="."/>
            <xsl:if test="position()!=last()">,</xsl:if>
        </xsl:for-each>
    </test>
</xsl:template>

</xsl:stylesheet>

结果:

<?xml version="1.0" encoding="UTF-8"?>
<test>g,b,d,e,f</test>