【发布时间】:2017-02-06 14:25:39
【问题描述】:
我想从连接的字符串中删除重复的值。
输入是:
<?xml version="1.0" encoding="ISO-8859-1"?>
<QL>
<QITEM>
<SERIAL>123</SERIAL>
<PROD_NAME>User/Device</PROD_NAME>
</QITEM>
<QITEM>
<SERIAL>123</SERIAL>
<PROD_NAME>User/Dev</PROD_NAME>
</QITEM>
<QITEM>
<SERIAL>123</SERIAL>
<PROD_NAME>User/Device</PROD_NAME>
</QITEM>
<QITEM>
<SERIAL>1234</SERIAL>
<PROD_NAME>45 Mbps</PROD_NAME>
</QITEM>
</QL>
<QL>
<QITEM>
<SERIAL>123</SERIAL>
<PROD_NAME>User/Device</PROD_NAME>
</QITEM>
<QITEM>
<SERIAL>123</SERIAL>
<PROD_NAME>User/Dev</PROD_NAME>
</QITEM>
<QITEM>
<SERIAL>123</SERIAL>
<PROD_NAME>User/Device</PROD_NAME>
</QITEM>
<QITEM>
<SERIAL>1234</SERIAL>
<PROD_NAME>45 Mbps</PROD_NAME>
</QITEM>
</QL>
我想连接这些值,输出应该是这样的:
<Result>
<SERIAL>123,1234</SERIAL>
<PROD_NAME>User/Dev,User/Device,45 Mbps</PROD_NAME>
</Result>
<Result>
<SERIAL>123,1234</SERIAL>
<PROD_NAME>User/Dev,User/Device,45 Mbps</PROD_NAME>
</Result>
到目前为止,我已经尝试使用以下模板来实现这一点:
<xsl:template name="join">
<xsl:param name="list"/>
<xsl:param name="separator"/>
<xsl:for-each select="$list">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">
<xsl:value-of select="$separator"/>
</xsl:if>
</xsl:for-each>
</xsl:template>
这是用逗号分隔的值。
但我想获得独特的价值。
【问题讨论】:
-
那么
<PROD_NAME>User/Dev</PROD_NAME>值发生了什么,为什么会被消除? -
抱歉打错了。我现在正在更新问题
-
那么你在纠结什么?例如,
distinct-values(//SERIAL)会给你序列123,1234。 -
我已经更新了 Question.Distinct-values 函数这里不支持
-
如果不支持
distinct-values函数,您将被困在XSLT-1.0 函数中。所以this SO answer 可能是重复的。