3
ゼロ幅の文字を追加する関数があります。それは私がそれにしたいと思うようにかなり働いていない。ゼロスペース文字を15文字ごとに追加するにはどうすればいいですか?通常のスペースが含まれていない場合はどうすればよいですか?XSLT:条件付きでサブストリングの変更を追加します。
<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) > $max_length">
<xsl:value-of select="'​'"/>
<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>
@Tomalak:まあまあです。サブストリング間のスペースのみをチェックします。部分文字列に**任意の**空白文字が含まれているとゼロスペース文字を追加したくない – Ace
@Ace:私はそのような質問を理解しませんでした。しかし、それは簡単です。 'string-length($ str)'と 'string-length(translate($ str、 ''、 ''))を比較してください。それらが等しい場合、 '$ str'は空白を含みません。 – Tomalak
@Tomalak:問題はありません。質問を更新してより明確にする、あなたの答えを更新することはできますか? – Ace