【发布时间】:2018-09-04 08:52:55
【问题描述】:
我是一个 xslt 初学者,我真的在努力完成以下任务:
来自这个xml(NB我不知道父节点的子节点数量):
<parent>
<element_a id="e1"/>
<element_b id="e2"/>
<element_a id="e3"/>
<element_c id="e4"/>
...
</parent>
我需要得到这个xml:
<e1>
<e2>
<e3>
<e4>
...
</e4>
</e3>
</e2>
</e1>
我已经尝试了几次,但我无法获得正确的输出。这是一种尝试:
<xsl:template name="test">
<xsl:element name="{@id}">
<xsl:if test="position() != last()">
<xsl:call-template name="test"/>
</xsl:if>
</xsl:element>
</xsl:template>
<xsl:template match="parent">
<parent>
<xsl:for-each select="./*">
<xsl:for-each select=".">
<xsl:element name="{@id}">
<xsl:if test="position() != last()">
<xsl:call-template name="test"/>
</xsl:if>
</xsl:element>
</xsl:for-each>
</xsl:for-each>
</parent>
</xsl:template>
【问题讨论】:
-
即使不正确,您能否在问题中包含您尝试过的 XSLT?实际上,您可能离解决方案并不遥远。谢谢!
-
您尝试的一个问题是您命名模板中的
<xsl:call-template name="test"/>指令实际上并没有改变当前元素,因此它会在同一个元素上无限递归。
标签: xslt