在XSLT 2.0中的函数之前的子字符串

时间:2017-11-20 22:39:40

标签: substring xslt-2.0

我需要有关字符串操作的帮助。

方案: <ADR_LINE>This is a sample text, to test adr-line.</ADR_LINE>

如果长度超过20,则要求将ADR_LINE拆分为2.在拆分时,我们需要确保字符串中的最后一个字符应为空格,逗号或句号。

在此示例中,总长度为40,并且拆分类似于: <ADR_LINE>This is a sample tex</ADR_LINE>  <ADR_LINE>t, to test adr-line.</ADR_LINE>

为避免在此示例中删除单词'text',我尝试使用以下逻辑: <xsl:if test="not(substring($adrlnpart1, 20) = ' ' or '.' or ',' or '-')"> <xsl:variable name="adrln2trunc" select="substring-before($adrln2part1,' ')"/> </xsl:if>

在substring-before函数中,我不确定我们是否可以指定多个字符(空格,逗号或句号)来查看字符串的结尾。在此示例中,检查空间可能有效,但其他方案将需要逗号或句号。

请建议您处理此问题。提前致谢。

1 个答案:

答案 0 :(得分:0)

以下是使用xsl:analyze-string的示例:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

    <xsl:output indent="yes"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="ADR_LINE[string-length() > 20]">
        <xsl:analyze-string select="." regex=".{{19,}}?([., ]|$)">
            <xsl:matching-substring>
                <ADR_LINE>
                    <xsl:value-of select="."/>
                </ADR_LINE>                
            </xsl:matching-substring>
            <xsl:non-matching-substring>
                <ADR_LINE>
                    <xsl:value-of select="."/>
                </ADR_LINE>                   
            </xsl:non-matching-substring>
        </xsl:analyze-string>
    </xsl:template>

</xsl:transform>

拆分

<ADR_LINE>This is a sample text, to test adr-line.</ADR_LINE>

进入

<ADR_LINE>This is a sample text,</ADR_LINE>
<ADR_LINE> to test adr-line.</ADR_LINE>

http://xsltransform.net/pNmBy2a的在线示例。