这是我输入的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'。
我试图通过应用递归来获得它,但它似乎不起作用。我无法循环回节点。任何人都可以帮助我。
答案 0 :(得分:2)
此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>