次のタスク
があります。長い文字列を含む xml 要素があります。<input>
この要素を多数の htmlタグに変換するには、xsl を使用する必要があります。これは次のように機能します: 文字列が<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>