我不明白 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
。
请注意,在此转换期间绝不会调用您的第一个模板。
我不明白输出,我真的很困惑
<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
。
请注意,在此转换期间绝不会调用您的第一个模板。