3

左トリム テンプレートを作成しており、以下のテンプレートがあります。

<xsl:template name="str:left-trim">
    <xsl:param name="string" select="''"/>
    <xsl:variable name="tmp" select="substring($string, 1, 1)"/>

    <xsl:if test="$tmp = ' '">
        <xsl:variable name="tmp2" select="substring-after($string, $tmp)"/>
        <xsl:choose>
            <xsl:when test="$tmp2 != ''">
                <xsl:call-template name="str:left-trim">
                    <xsl:with-param name="string" select="$tmp2"/>        
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$tmp2"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:if>
    <xsl:if test="$tmp != ' '">
        <xsl:value-of select="$string"/>
    </xsl:if>
</xsl:template>

次のような引数を渡すと:

<xsl:variable name="str-test2">this is a america</xsl:variable>

私のテンプレートは問題なく動作しますが、以下のような引数を渡すと、テンプレートは失敗します。ブレーク(改行)に何か問題があると思います

    <xsl:variable name="str-test2">            
        this is a america
    </xsl:variable>

何か提案はありますか?

4

2 に答える 2

4

これは私にとってはうまくいきます。str: 名前空間を使用しなかったことに注意してください。さらに、先頭の改行をチェックしています。

<xsl:template name="left-trim">
  <xsl:param name="string" select="''"/>
  <xsl:variable name="tmp" select="substring($string, 1, 1)"/>

  <xsl:choose>
    <xsl:when test="$tmp = ' ' or $tmp = '&#xA;'">
      <xsl:call-template name="left-trim">
        <xsl:with-param name="string" select="substring-after($string, $tmp)"/>        
      </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
      <xsl:value-of select="$string"/>
    </xsl:otherwise>
  </xsl:choose>
</xsl:template>

HTH、アクセル。

于 2009-12-07T13:23:19.960 に答える
2

再帰テンプレートを使用せずに XSLT 1.0 で文字列を left-trim するソリューションを次に示します。

<xsl:value-of select="substring($str-test2, string-length(substring-before($str-test2, substring(normalize-space($str-test2), 1, 1))) + 1)"/>
于 2013-02-28T00:15:35.150 に答える