如何在 XSLT 中使用 ',' 标记化后插入值子字符串 - 在最后一个'('之后



我正在尝试插入tokenizestart-with, '('之后最后一个'('的值subring-before。我之前尝试过两个子字符串(例如<xsl:value-of select="concat(substring-before(current-grouping-key(), '('), .)"/>('('replace功能<p><xsl:value-of select="concat(replace(substring-before(current-grouping-key(), ','), '^([0-9]+)|((.*))((([a-z0-9])))', '$1$2'), .)"/></p>
输入 XML

<root>
<p>17200(b)(2), (4)–(6), (8), (12), (16), (20), and (21)</p>
<p>1(a), (b), (c)</p>
<p>2</p>
<p>2</p>
</root>

XSLT:

<xsl:template match="root">
<root>
<xsl:for-each-group select="p" group-by=".">
<xsl:choose>
<xsl:when test="contains(current-grouping-key(), ', ')">
<xsl:for-each select="tokenize(current-grouping-key(), ', and |, ')">
<xsl:choose>
<xsl:when test="starts-with(., '(')">
<p><xsl:value-of select="concat(replace(substring-before(current-grouping-key(), ','), '^([0-9]+)|((.*))((([a-z0-9])))', '$1$2'), .)"/></p>
<!--<p><xsl:value-of select="concat(substring-before(current-grouping-key(), '('), .)"/></p>-->
</xsl:when>
<xsl:otherwise>
<p><xsl:value-of select="."/></p>
</xsl:otherwise>
</xsl:choose>
</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>

预期输出

<root>
<p>17200(b)(2)</p>
<p>17200(b)(4)–(6)</p>
<p>17200(b)(8)</p>
<p>17200(b)(12)</p>
<p>17200(b)(16)</p>
<p>17200(b)(20)</p>
<p>17200(b)(21)</p>
<p>1(a)</p>
<p>1(b)</p>
<p>1(c)</p>
<p>2</p>
</root>

代码:https://xsltfiddle.liberty-development.net/3NSTbfj/31

我认为您似乎只想将最后一个标记中的任何字符连接到标记化值之前(

<xsl:template match="root">
<root>
<xsl:for-each-group select="p" group-by=".">
<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>

https://xsltfiddle.liberty-development.net/3NSTbfj/33

最新更新