首页 > 解决方案 > 如何从 xml 或 xslt 中的变量中删除重复值

问题描述

我正在尝试查找 metric 标签的值并将其值存储在 incrementalprop 变量中。当我执行此代码时,我得到了 metric 的所有值,但我只希望将唯一值添加到由 | 分隔的变量 incrementalprop 中 ,所以我使用了 not contains if value doesn't contain metric value then add in variable

<xsl:param name="incrementalprop"> <xsl:for-each select="// :VIP/ :VIP_LIST/*:VIP_LINES">

    <xsl:choose>
    
  <xsl:when test="string-length(./*:Metric) >0 and not(contains(incrementalprop,./*:Metric))">
    <xsl:value-of select="./*:Metric"/>
    <xsl:text>|</xsl:text>
  </xsl:when>
  <xsl:otherwise>
    <xsl:value-of select="."/>
  </xsl:otherwise>
</xsl:choose>

    </xsl:for-each>

    
    </xsl:param>

输出:- 托管命名中心|托管命名中心|托管命名中心|托管命名中心|数据用户|数据用户|虚拟用户|未知用户|

预期:- 托管命名中心|数据用户|虚拟用户|未知用户

Sample Input :-
<VIP id="7273236vvvsd632">
    <client id=""/>
    <VIP_LIST>
        <VIP_LINES id="A">
            <Metric>HOSTED NAMED CENTER</Metric>
            <quantity>92</quantity>
            <phoneCountryCode xsi:nil="true"/>
            <phoneNumber xsi:nil="true"/>
        </VIP_LINES>
        <VIP_LINES id="B">
            <Metric>HOSTED NAMED CENTER</Metric>
            <quantity>92</quantity>
            <phoneCountryCode xsi:nil="true"/>
            <phoneNumber xsi:nil="true"/>
        </VIP_LINES>
        <VIP_LINES id="C">
            <Metric>DATA USER</Metric>
            <quantity>92</quantity>
            <phoneCountryCode xsi:nil="true"/>
            <phoneNumber xsi:nil="true"/>
        </VIP_LINES>
        <VIP_LINES id="D">
            <Metric>UNKOWNN USER</Metric>
            <quantity>92</quantity>
            <phoneCountryCode xsi:nil="true"/>
            <phoneNumber xsi:nil="true"/>
        </VIP_LINES>
        <VIP_LINES id="D">
            <Metric>DUMMY USER</Metric>
            <quantity>92</quantity>
            <phoneCountryCode xsi:nil="true"/>
            <phoneNumber xsi:nil="true"/>
        </VIP_LINES>
        <VIP_LINES id="D">
            <Metric>DATA USER</Metric>
            <quantity>92</quantity>
            <phoneCountryCode xsi:nil="true"/>
            <phoneNumber xsi:nil="true"/>
        </VIP_LINES>
        <VIP_LINES id="D">
            <Metric>HOSTED NAMED CENTER</Metric>
            <quantity>92</quantity>
            <phoneCountryCode xsi:nil="true"/>
            <phoneNumber xsi:nil="true"/>
        </VIP_LINES>
        ....
        ....
        ...
        ...
    </VIP_LIST>... ... .. 

</VIP>

标签: xmlxslt

解决方案


*:VIP_LINES我假设你有 XSLT 2 或 3 所以你可以简单地做

<xsl:param name="incrementalprop" select="string-join(distinct-values(//*:VIP_LINES/*:Metric), '|')"/>

推荐阅读