繁体   English   中英

如何在xslt中创建递归模板

[英]How do I create recursive template in xslt

我有一个共享点列表,其设计如下。 这是输入的样本数据。

Name     ID  Navigation_URL ParentID IsShow 
Test1    1  #               0        Yes
Test2    2  #               0        Yes
Test2.1  3  #               2        Yes
Test2.1.14  #               3        Yes

如何使用xslt函数创建无序列表。 输出应为:

<ul>
<li>Test1</li>
<li>Test2
    <ul>
        <li>Test2.1
              <ul>
                   <li>Test2.1.1</li>
             </ul>
        </li>
    </ul>
</li>
</ul>

我对SharePoint一无所知,我只能在XSLT部分为您提供帮助。 一旦有了XML文档,例如:

XML格式

<root>
  <Item>
    <Name>Test1</Name>
    <ID>1</ID>
    <ParentID>0</ParentID>
  </Item>
  <Item>
    <Name>Test2</Name>
    <ID>2</ID>
    <ParentID>0</ParentID>
  </Item>
  <Item>
    <Name>Test2.1</Name>
    <ID>3</ID>
    <ParentID>2</ParentID>
  </Item>
  <Item>
    <Name>Test2.1.1</Name>
    <ID>4</ID>
    <ParentID>3</ParentID>
  </Item>
</root>

以下样式表:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/>

<xsl:key name="item-by-parent" match="Item" use="ParentID" />

<xsl:template match="/root">
    <ul>
        <xsl:apply-templates select="Item[ParentID='0']"/>
    </ul>
</xsl:template>

<xsl:template match="Item">
    <xsl:variable name="children" select="key('item-by-parent', ID)" />
    <li>
        <xsl:value-of select="Name"/>
        <xsl:if test="$children">
            <ul>
                <xsl:apply-templates select="$children"/>
            </ul>
        </xsl:if>
    </li>
</xsl:template>

</xsl:stylesheet>

将其转换为:

结果

<ul>
   <li>Test1</li>
   <li>Test2<ul>
         <li>Test2.1<ul>
               <li>Test2.1.1</li>
            </ul>
         </li>
      </ul>
   </li>
</ul>

编辑:

错过了一件事情isShow ...这是一个节点/列,我可以根据该节点/列排除或不显示相应的项目

您可以添加另一个模板:

<xsl:template match="Item[IsShow='No']"/>

这是假设排除一个项目也应该排除其后代。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM