我正在尝试编写一个计算新值的递归函数.什么激励我的基本想法是,给定水平的轮廓,我想计算新的水平,使得数字总是连续的(也就是说,你不能立即从第2级到第5级),但同时尊重原始关系.
给定这样的输入(注意输入可能完全不同):
<root>
<item outlinePos="1">yo</item>
<item outlinePos="2">yo</item>
<item outlinePos="2">yo</item>
<item outlinePos="4">yo</item>
<item outlinePos="1">yo</item>
<item outlinePos="8">yo</item>
<item outlinePos="8">yo</item>
<item outlinePos="9">yo</item>
<item outlinePos="3">yo</item>
<item outlinePos="8">yo</item>
<item outlinePos="4">yo</item>
</root>
Run Code Online (Sandbox Code Playgroud)
我想要这个输出
<root>
<item outlinePos="0">yo</item>
<item outlinePos="1">yo</item>
<item outlinePos="1">yo</item>
<item outlinePos="2">yo</item>
<item outlinePos="0">yo</item>
<item outlinePos="1">yo</item>
<item outlinePos="1">yo</item>
<item outlinePos="2">yo</item>
<item outlinePos="1">yo</item>
<item outlinePos="2">yo</item>
<item outlinePos="2">yo</item>
</root>
Run Code Online (Sandbox Code Playgroud)
我正在使用XSLT 2/XPath 2.这是我到目前为止,但我没有得到正确的结果,我知道问题在哪里(从输入数据中的第五项开始); 我已经包含了解释我正在尝试做什么的评论:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="item[@outlinePos]">
<xsl:element name="item">
<xsl:attribute name="outlinePos" select="test:newLevel(.)"/>
<xsl:apply-templates select="@*[name(.)!='outlinePos'] | node()"/>
</xsl:element>
</xsl:template>
<xsl:function name="test:newLevel">
<xsl:param name="context"/>
<xsl:choose> …Run Code Online (Sandbox Code Playgroud)