如何使用XSLT 1.0省略嵌套圆括号内的字符串

时间:2017-12-21 07:58:26

标签: xslt-1.0

我有一个节点

<statement> 
     SORBITOL, ARÔMES ARTIFICIELS, DIOXYDE DE SILICIUM, ASPARTAME (05 mg / PIECE (01 g)), ACESULFAME-POTASSIUM (03 mg / PIECE (01 g)), STEARATE DE MAGNESIUM. L'ASPARTAME CONTIENT DE LA PHENYLALANINE.
</statement>

我需要将其转换为:

<statement>SORBITOL, ARÔMES ARTIFICIELS, DIOXYDE DE SILICIUM, ASPARTAME , ACESULFAME-POTASSIUM , STEARATE DE MAGNESIUM. L'ASPARTAME CONTIENT DE LA PHENYLALANINE.</statement>

因此我需要一个函数来递归地提取除圆形括号内的字符串之外的所有文本,这样如果圆括号的更多嵌套存在,则函数应该通过省略括号和括号内的字符串来返回字符串。我在XSLT 1.0版中需要它。

1 个答案:

答案 0 :(得分:0)

试试这个:

XSLT 1.0

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output indent="yes"/>
    <xsl:template match="statement">
        <xsl:copy>
            <xsl:call-template name="removeRoundBracket">
                <xsl:with-param name="data" select="normalize-space(.)"/>
            </xsl:call-template>
        </xsl:copy>
    </xsl:template>

    <xsl:template name="removeRoundBracket">
        <xsl:param name="data"/>
        <xsl:choose>
            <xsl:when test="contains(substring-before($data, ')'), '(')">
                <xsl:value-of select="substring-before($data, '(')"/>
                <xsl:call-template name="removeRoundBracket">
                    <xsl:with-param name="data" select="substring-after($data, ')')"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:when test="contains($data, ')')">
                <xsl:call-template name="removeRoundBracket">
                    <xsl:with-param name="data" select="substring-after($data, ')')"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$data"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>

请参阅http://xsltransform.net/93nvfck

处的转化

<强>输出

<statement>SORBITOL, ARÔMES ARTIFICIELS, DIOXYDE DE SILICIUM, ASPARTAME , ACESULFAME-POTASSIUM , STEARATE DE MAGNESIUM. L'ASPARTAME CONTIENT DE LA PHENYLALANINE.</statement>