我需要有关字符串操作的帮助。
方案:
<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函数中,我不确定我们是否可以指定多个字符(空格,逗号或句号)来查看字符串的结尾。在此示例中,检查空间可能有效,但其他方案将需要逗号或句号。
请建议您处理此问题。提前致谢。
答案 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>