gpt4 book ai didi

xml - XSLT:有条件地添加修改子字符串

转载 作者:数据小太阳 更新时间:2023-10-29 02:32:25 26 4
gpt4 key购买 nike

我有一个添加零宽度字符的函数。不过,它并没有完全按照我想要的方式工作。如果它不包含普通空格,如何让它每 15 个字符添加一个零空格字符

<xsl:template match="text()[parent::d:entry]">
<xsl:call-template name="intersperse-with-zero-spaces">
<xsl:with-param name="str" select="."/>
<xsl:with-param name="max_length" select="number(15)"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="intersperse-with-zero-spaces">
<xsl:param name="str"/>
<xsl:param name="max_length"/>
<xsl:variable name="ret">
<xsl:value-of select="substring($str, 1, $max_length)"/>
<xsl:if test="string-length($str) &gt; $max_length">
<xsl:value-of select="'&#x200b;'"/>
<xsl:call-template name="intersperse-with-zero-spaces">
<xsl:with-param name="str" select="substring($str, $max_length + 1)"/>
<xsl:with-param name="max_length" select="$max_length"/>
</xsl:call-template>
</xsl:if>
</xsl:variable>
<xsl:value-of select="$ret"/>
</xsl:template>

最佳答案

一些提示。首先:

<xsl:template match="d:entry/text()">

优于

<xsl:template match="text()[parent::d:entry]">

然后:

<xsl:template name="intersperse-with-zero-spaces">
<xsl:param name="str"/>
<xsl:param name="max_length"/>

<!-- your variable "ret" is not necessary at all -->

<xsl:variable name="head" select="substring($str, 1, $max_length)" />
<xsl:variable name="tail" select="substring($str, $max_length + 1)" />

<xsl:value-of select="$head"/>

<!-- the empty string evaluates to false -->
<xsl:if test="$tail">
<!-- there's no space present when translate() returns the same string
and the $tail does not begin with a space, either -->
<xsl:if test="
string-length(translate($head, ' ', '')) = string-length($head)
and not(substring($tail, 1, 1) = ' ')
">
<xsl:text>&#x200b;</xsl:text>
</xsl:if>
<xsl:call-template name="intersperse-with-zero-spaces">
<xsl:with-param name="str" select="$tail"/>
<xsl:with-param name="max_length" select="$max_length"/>
</xsl:call-template>
</xsl:if>
</xsl:template>

此外,我可能会将变量称为 $interval,而不是 $max_length。但这纯粹是装饰性的。

关于xml - XSLT:有条件地添加修改子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4672790/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com