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 is not > 2 but = 2
输出第二个字母 F
输出第一个字母 E

返回外部调用
输入 = D
len 小于 2
输出 D

返回外部调用
再次调用输入 = ABC
len = 3
len > 2 而不是 2
mid = 1

再次调用输入 BC
len = 2
len is not > 2 but = 2
输出第二个字母 C
输出第一个字母 B

返回外部调用
输入 A
len 小于 2
输出 A

于 2013-07-17T17:41:05.733 回答