我不明白 xsl copy/sequence 的输出

I don't understand the output of xsl copy/ sequence

我不明白输出,我真的很困惑

<xsl:template match="t[@repeat]"> 

我匹配<t repeat="2">

<xsl:variable name="number" select="xsd:integer(@repeat)"/>

存储号码2

<xsl:variable name="result"> 
            <xsl:copy>
                <xsl:apply-templates select="*"/>
            </xsl:copy>
        </xsl:variable>

存储 的所有子元素,所以只有:<t repeat="3"/>

<xsl:for-each select="1 to $number">
    <xsl:sequence select="$result"/>
</xsl:for-each>

我不应该只得到 <t/> <t/> 没有属性 repeat="3" 吗?

xsl :

   <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">

        <xsl:template match="t">
            <xsl:copy>
                <xsl:apply-templates/>
            </xsl:copy>
        </xsl:template>
    
        <xsl:template match="t[@repeat]">
            <xsl:variable name="number" select="xsd:integer(@repeat)"/>
            <xsl:variable name="result">
                <xsl:copy>
                    <xsl:apply-templates/>
                </xsl:copy>
            </xsl:variable>
            <xsl:for-each select="1 to $number">
                <xsl:sequence select="$result"/>
            </xsl:for-each>
        </xsl:template>

    </xsl:stylesheet>

xml :

<?xml version="1.0" encoding="utf-8"?>
<t repeat="2">
    <t repeat="3"/>
</t>

输出:

<t>
    <t/>
    <t/>
    <t/>
</t>
<t>
    <t/>
    <t/>
    <t/>
</t>

我无法理解您的结果与您的预期有何不同。如果您想了解结果的每个部分来自何处,请尝试更改:

        <xsl:variable name="result">
            <xsl:copy>
                <xsl:apply-templates/>
            </xsl:copy>
        </xsl:variable>

至:

        <xsl:variable name="result">
            <xsl:copy>
                <xsl:copy-of select="@*"/>
                <xsl:apply-templates/>
            </xsl:copy>
        </xsl:variable>

结果将是:

<?xml version="1.0" encoding="utf-8"?>
<t repeat="2">
   <t repeat="3"/>
   <t repeat="3"/>
   <t repeat="3"/>
</t>
<t repeat="2">
   <t repeat="3"/>
   <t repeat="3"/>
   <t repeat="3"/>
</t>

这准确反映了将重复递归应用于父项和子项的结果 t

请注意,在此转换期间绝不会调用您的第一个模板。