gpt4 book ai didi

xslt - 如何获取字符串中字符的最后一个索引?

转载 作者:行者123 更新时间:2023-12-04 17:28:56 26 4
gpt4 key购买 nike

我有以下任务:
有一个包含长字符串的 xml 元素。我需要使用 xsl 将这个元素转换成多个 html <input>标签。它是这样工作的:如果字符串长于 <input>字段可以保持而不滚动我递归调用相同的模板以创建另一个带有剩余文本的输入字段。

问题是字符串经常在单词的中间被拆分,这并不好。

所以我需要找到最后一个space的位置不大于适合 <input> 的子字符串大小的字符标记并仅打印该行之前的子字符串。

所以我准备了一个最大长度的子串,它可以适合该字段,但我不知道如何获得最后一个 space 的索引。在其中并将其作为参数传递给函数的下一次调用。

更新:这是我到目前为止所得到的

<xsl:template name="multilineInput">
<xsl:param name="input" select="."/>
<xsl:param name="maxFirst" select="."/>
<xsl:param name="firstLineWidth" select="."/>



<input>
<xsl:attribute name="readonly">readonly</xsl:attribute>
<xsl:attribute name="class">input_multiline</xsl:attribute>
<xsl:attribute name="style">width = "<xsl:value-of select="$firstLineWidth"/>"</xsl:attribute>
<xsl:attribute name="type">text</xsl:attribute>
<xsl:attribute name="value"><xsl:value-of select="substring($input, 1, $maxFirst)"/></xsl:attribute>
</input>

<xsl:if test="$maxFirst &lt; string-length($input)">
<xsl:call-template name="multilineInput">
<xsl:with-param name="input" select="substring($input, $maxFirst+1, string-length($input)-$maxFirst)"/>
<xsl:with-param name="maxFirst" select="110"/>
<xsl:with-param name="firstLineWidth" select="'980'"/>
</xsl:call-template>
</xsl:if>

</xsl:template>

最佳答案

以下递归模板可用于返回给定分隔符的最后一个索引:

<xsl:template name="last-index-of">
<xsl:param name="txt"/>
<xsl:param name="remainder" select="$txt"/>
<xsl:param name="delimiter" select="' '"/>

<xsl:choose>
<xsl:when test="contains($remainder, $delimiter)">
<xsl:call-template name="last-index-of">
<xsl:with-param name="txt" select="$txt"/>
<xsl:with-param name="remainder" select="substring-after($remainder, $delimiter)"/>
<xsl:with-param name="delimiter" select="$delimiter"/>
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="lastIndex" select="string-length(substring($txt, 1, string-length($txt)-string-length($remainder)))+1"/>
<xsl:choose>
<xsl:when test="string-length($remainder)=0">
<xsl:value-of select="string-length($txt)"/>
</xsl:when>
<xsl:when test="$lastIndex>0">
<xsl:value-of select="($lastIndex - string-length($delimiter))"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="0"/>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

可以这样调用:
<xsl:call-template name="last-index-of">
<xsl:with-param name="txt" select="'The quick brown fox jumped over the lazy dog.'"/>
<xsl:with-param name="delimiter" select="' '"></xsl:with-param>
</xsl:call-template>

并返回: 41
您可以将模板调用的结果分配给这样的变量:
<xsl:variable name="last-index">
<xsl:call-template name="last-index-of">
<xsl:with-param name="txt" select="'The quick brown fox jumped over the lazy dog.'"/>
<xsl:with-param name="delimiter" select="' '"></xsl:with-param>
</xsl:call-template>
</xsl:variable>

关于xslt - 如何获取字符串中字符的最后一个索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12642166/

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