XSLT中的递归列表?

时间:2014-09-05 21:05:06

标签: xml xslt recursion

我一直试图获取XSLT行的递归列表 - 每个项目都有一个数字ID和一个可选的Parent Item ID,用于标识它可能包含的项目。

这是我的输入XML(格式化感谢SharePoint):

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="parentchild.xslt"?>
<Rows>
    <Row>
        <ID>1</ID>
        <Title>Top Item 1</Title>
        <Parent></Parent>
    </Row>
    <Row>
        <ID>2</ID>
        <Title>Top Item 2</Title>
        <Parent></Parent>
    </Row>
    <Row>
        <ID>3</ID>
        <Title>Child 1 for top item 1</Title>
        <Parent>1</Parent>
    </Row>
    <Row>
        <ID>4</ID>
        <Title>Child 2 for top item 1</Title>
        <Parent>1</Parent>
    </Row>
    <Row>
        <ID>5</ID>
        <Title>Grandchild 1 for top item 1</Title>
        <Parent>3</Parent>
    </Row>
</Rows>

这是我预期结果的模型:

expected result

这是我的实际结果:每个顶级项目都成为其他顶级项目的子项。 真正的孩子(他们是军团)无处可寻。

All the top level items become children... of themselves.

我最好的猜测是我使用当前错误,或者错误地运行......我无论如何都不是 XSLT大师。

2 个答案:

答案 0 :(得分:1)

好吧,每次处理一行时,都会生成一个<li><ul>XXX</ul></li>结构,并且递归调用会填充XXX,所以显然每一行都会生成另一个(或两个)嵌套级别。我无法告诉你如何解决这个问题,因为我不了解你的照片。

答案 1 :(得分:0)

  1. 也许我不应该在那里使用那么多@个标志。
  2. //Rows修复了儿童用品。
  3. 我仍然不知道这将如何重新进入SharePoint。

    <?xml version="1.0" encoding="utf-8" ?>
    <xsl:stylesheet version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:h="http://www.w3.org/1999/xhtml">
    
    <xsl:template match='/'>
        <ul>    
            <xsl:apply-templates select='Rows/Row[Parent=""]' />
        </ul>
    </xsl:template>
    
    <xsl:template match='Row'>
        <li>
            <xsl:value-of select="Title" />
            <br/>Child items:
            <ul>
                <xsl:apply-templates select="//Rows/Row[Parent=current()/ID]" />
            </ul>
        </li>
    </xsl:template>
    </xsl:stylesheet>
    

    结果:

    a properly cascading list