我有以下任务:
有一个包含长字符串的 xml 元素。我需要使用 xsl 将此元素转换为多个 html<input>
标签。它的工作原理是这样的:如果字符串的长度超过了一个<input>
字段在不滚动的情况下可以容纳的长度,我会递归地调用相同的模板来创建另一个带有剩余文本的输入字段。
问题是字符串经常在单词的中间被分割,这不是很好。
所以我需要找到最后一个space
字符的位置,它不大于适合<input>
标签的子字符串的大小,并且只打印它之前的子字符串。
所以我准备了一个最大长度的子字符串,它可以适合该字段,但我不知道如何获取其中最后一个的索引space
并将其作为参数传递给函数的下一次调用。
UPD:这是我到目前为止所得到的
<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 < 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>