我有一个包含非数值的变量,我需要使用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
连接变量很简单,但我需要与之相反! 请帮忙,
答案 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>