0

これはすべて、文字列を逆にすることです。指定された値「ABCDEF」に対して適切に機能します。出力も正しい「FEDCBA」です。しかし、これがこの文字列に文字「A」と「D」をどのように出力しているか知りたいです。誰かがこれを理解するのを手伝ってくれますか? お願いします。この作業方法を詳しく説明します。

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs">
<xsl:output method="html"/>
<xsl:template name="reverse">
<xsl:param name="input" select="'ABCDEF'"/>
<xsl:variable name="len" select="string-length($input)"/>
<xsl:choose>
<xsl:when test="$len &lt; 2">
<xsl:value-of select="$input"/>
</xsl:when>
<xsl:when test="$len = 2">
<xsl:value-of select="substring($input,2,1)"/>
<xsl:value-of select="substring($input,1,1)"/>
</xsl:when>
<xsl:otherwise>
<xsl:variable name="mid" select="floor($len div 2)"/>
<xsl:call-template name="reverse">
<xsl:with-param name="input" select="substring($input,$mid+1,$mid+1)"/>
</xsl:call-template>
<xsl:call-template name="reverse">
<xsl:with-param name="input" select="substring($input,1,$mid)"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="/">
<xsl:call-template name="reverse">
</xsl:call-template>
</xsl:template>
</xsl:stylesheet>
4

1 に答える 1

0

何が起こるかは次のとおりです。

入力 ABCDEF
len = 6
len is > 2 and not = 2
mid = 3

入力 DEF
len = 3で再度呼び出し
len is > 2 and not = 2
mid = 1

入力 EF で再度呼び出し
len = 2
len は > 2 ではないが = 2 2
番目の文字 Fを
出力 最初の文字 E

を出力 外部呼び出しに戻る
入力 = D で呼び出し
len は 2 未満
出力 D

外部呼び出しに戻る
input = ABC
len = 3で再度呼び出す
len は > 2 であり、2 ではありません
mid = 1

入力 BC
len = 2で再度呼び出す
len は > 2 ではないが = 2 2
番目の文字 Cを
出力する 最初の文字 B

を出力 する 外部呼び出しに戻る
入力 A で呼び出す
len は 2 より小さい
出力 A

于 2013-07-17T17:41:05.733 に答える