如何在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,请提出一个新问题,您可以解释问题中的细节,简单地发布一个指向某个样本的链接,其中包含更多变量的输入数据,而不详细说明您想要的结果以及输入->输出映射背后的逻辑,这就没有必要使需求复杂化。