如何在XSLT中标记化use group by后删除相同的数字

如何在XSLT中标记化use group by后删除相同的数字,xslt,xslt-2.0,xslt-3.0,Xslt,Xslt 2.0,Xslt 3.0,我试图在标记该值和另一个输入值后删除重复的数字,例如1(a)、(b)、(c)和1(a)。如何使用分组方式删除重复条目 输入XML <root> <p>1(a), (b), (c)</p> <p>1(a)</p> <p>2(a)</p> <p>3(a)</p> <p>1(c)</p> </root> 1(a)、(

我试图在标记该值和另一个输入值后删除重复的数字,例如
1(a)、(b)、(c)

1(a)

。如何使用分组方式删除重复条目
输入XML

<root>
    <p>1(a), (b), (c)</p>
    <p>1(a)</p>
    <p>2(a)</p>
    <p>3(a)</p>
    <p>1(c)</p>
</root>

1(a)、(b)、(c)

1(a)

2(a)

3(a)

1(c)

预期产出

<root>
   <p>1(a)</p>
   <p>1(b)</p>
   <p>1(c)</p>
   <p>2(a)</p>
   <p>3(a)</p>
</root>

1(a)

1(b)

1(c)

2(a)

3(a)

XSLT代码

<xsl:template match="root">
    <root>
        <xsl:for-each-group select="p" group-by=".">
            <xsl:sort select="current-grouping-key()" data-type="number" order="ascending"/>
            <xsl:choose>
                <xsl:when test="contains(current-grouping-key(), ', ')">
                    <xsl:variable name="tokens" select="tokenize(current-grouping-key(), ', and |, ')"/>
                    <xsl:for-each select="$tokens">
                        <p>
                            <xsl:value-of
                                select="if (starts-with(., '('))
                                then replace(head($tokens), '(.*)\(.*?\)$', '$1') || .
                                else ."/>
                        </p>
                        
                    </xsl:for-each>
                </xsl:when>
                <xsl:otherwise>
                    <p><xsl:value-of select="current-grouping-key()"/></p>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:for-each-group>
    </root>
</xsl:template>



使用它就足够了

  <xsl:template match="root">
      <xsl:copy>
          <xsl:for-each 
            select="distinct-values(
                      p ! 
                      (let $tokens := tokenize(., '\s*,\s*') 
                           return (head($tokens), tail($tokens) ! (substring-before(head($tokens), '(') || .)))
                    )" expand-text="yes">
              <p>{.}</p>
          </xsl:for-each>
      </xsl:copy>
  </xsl:template>

{}


先生,我正在尝试调整此代码,但没有给出正确的输出。您能检查此代码吗?@Sam,请提出一个新问题,您可以解释问题中的细节,简单地发布一个指向某个样本的链接,其中包含更多变量的输入数据,而不详细说明您想要的结果以及输入->输出映射背后的逻辑,这就没有必要使需求复杂化。