xslt中的递归调用

xslt中的递归调用,xslt,recursion,Xslt,Recursion,这是我的输入xml <Nodes> <Node Name = "a"/> <Node Name = "b"/> <Node Name = "c"/> <Node Name = "d"/> <Node Name = "e"/> </Nodes> 我的输出应该如下所示: 您可以看到的输出xml应该为每个节点递归调用。 节点a应该是最后一个,下一个节点应该从底部显示,正如您在输出xml中看到的那样 <Row

这是我的输入xml

<Nodes>
<Node Name = "a"/>
<Node Name = "b"/>
<Node Name = "c"/>
<Node Name = "d"/>
<Node Name = "e"/>
</Nodes>

我的输出应该如下所示:

您可以看到的输出xml应该为每个节点递归调用。 节点a应该是最后一个,下一个节点应该从底部显示,正如您在输出xml中看到的那样

<Rows>
<Node>                              
    <NestedNodes>
        <Node>
            <NestedNodes>
                <Node>
                    <NestedNodes>
                        <Node>
                            <NestedNodes>
                                <Node>
                                    <NodeMembers>
                                        <NodeMember refDataItem="e"/>
                                    </NodeMembers>
                                </Node>
                            </NestedNodes>
                            <NodeMembers>
                                <NodeMember refDataItem="d"/>
                            </NodeMembers>
                        </Node>
                    </NestedNodes>
                    <NodeMembers>
                        <NodeMember refDataItem="c"/>
                    </NodeMembers>
                </Node>
            </NestedNodes>
            <NodeMembers>
                <NodeMember refDataItem="b"/>
            </NodeMembers>
        </Node>
    </NestedNodes>
    <NodeMembers>
        <NodeMember refDataItem="a"/>
    </NodeMembers>
</Node>

每个“节点”应采用以下结构:

<Node>
<NestedNodes>
<Node>
<NodeMembers>
<NodeMember refDataItem="e"/>
</NodeMembers>
</Node>
</NestedNodes>
<NodeMembers>
<NodeMember refDataItem="d"/>
</NodeMembers>
</Node>

NodeMember元素应该包含节点名,即'a'/'b'/'c'/'d'/'e'


我试图通过应用递归来实现这一点,但它似乎不起作用。我无法循环回节点。谁能帮帮我吗

此XSLT 1.0转换

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="Nodes">
    <xsl:apply-templates select="Node[1]" />
  </xsl:template>

  <xsl:template match="Node">
    <xsl:copy>
      <xsl:if test="following-sibling::Node">
        <NestedNodes>
          <xsl:apply-templates select="following-sibling::Node[1]" />
        </NestedNodes>
      </xsl:if>
      <NodeMembers>
        <NodeMember refDataItem="{@Name}"/>
      </NodeMembers>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

给你

<Node>
  <NestedNodes>
    <Node>
      <NestedNodes>
        <Node>
          <NestedNodes>
            <Node>
              <NestedNodes>
                <Node>
                  <NodeMembers>
                    <NodeMember refDataItem="e"/>
                  </NodeMembers>
                </Node>
              </NestedNodes>
              <NodeMembers>
                <NodeMember refDataItem="d"/>
              </NodeMembers>
            </Node>
          </NestedNodes>
          <NodeMembers>
            <NodeMember refDataItem="c"/>
          </NodeMembers>
        </Node>
      </NestedNodes>
      <NodeMembers>
        <NodeMember refDataItem="b"/>
      </NodeMembers>
    </Node>
  </NestedNodes>
  <NodeMembers>
    <NodeMember refDataItem="a"/>
  </NodeMembers>
</Node>

我不确定这种嵌套将实现什么功能?如果每个
都只有一个嵌套节点,那么实际上不需要树,也可以将其作为列表保存。