【发布时间】:2019-10-01 20:18:46
【问题描述】:
我想根据类别名称构建多级嵌套列表。这是我的 xml:
<UserDefinedTable xmlns="DotNetNuke/UserDefinedTable">
<Data>
<UserDefinedRowId>28</UserDefinedRowId>
<Category>KatOne</Category>
<Title>Level 1</Title>
</Data>
<Data>
<UserDefinedRowId>29</UserDefinedRowId>
<Category>KatOneSub</Category>
<Title>Level 2</Title>
</Data>
<Data>
<UserDefinedRowId>30</UserDefinedRowId>
<Category>KatOneSub</Category>
<Title>Level 2</Title>
</Data>
<Data>
<UserDefinedRowId>31</UserDefinedRowId>
<Category>KatTwo</Category>
<Title>Level 1</Title>
</Data>
<Data>
<UserDefinedRowId>32</UserDefinedRowId>
<Category>KatTwoSub</Category>
<Title>Level 2</Title>
</Data>
<Data>
<UserDefinedRowId>33</UserDefinedRowId>
<Category>KatTwoSub</Category>
<Title>Level 2</Title>
</Data>
</UserDefinedTable>
这是我对 XSLT 模板的尝试:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:udt="DotNetNuke/UserDefinedTable" exclude-result-prefixes="udt">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
<xsl:variable name="prefix_param">udt_<xsl:value-of select="//udt:Context/udt:ModuleId" />_param</xsl:variable>
<xsl:template match="udt:Data" mode="list">
<xsl:for-each select="udt:Data">
<li>
<span>KatUpper</span>
<ul class="level-two">
<xsl:for-each select="udt:Data">
<li>
KatSub
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</xsl:template>
<xsl:template match="/udt:UserDefinedTable">
<xsl:variable name="currentData" select="udt:Data" />
<xsl:if test="$currentData">
<ul class="my-list">
<xsl:apply-templates select="$currentData" mode="list">
</xsl:apply-templates>
</ul>
</xsl:if>
</xsl:template>
<xsl:template name="EditLink">
<xsl:if test="udt:EditLink">
<a href="{udt:EditLink}">
<img border="0" alt="edit" src="{//udt:Context/udt:ApplicationPath}/images/edit.gif" />
</a>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
我想创建一个 foreach 来检查类别名称是否与这个或那个相匹配,然后它会停留在上层,并且在每次迭代中我会检查类别名称是否有一个嵌套列表:
类似这样的:
<ul class="my-list">
<li>
<span>KatOne</span>
<ul clasS="levelTwo">
<li>
KatOneSub
</li>
<li>
KatOneSub
</li>
<li>
KatOneSub
</li>
</ul>
</li>
<li>
<span>KatTwo</span>
<ul clasS="levelTwo">
<li>
KatTwoSub
</li>
<li>
KatTwoSub
</li>
</ul>
</li>
</ul>
【问题讨论】:
-
您可以使用 XSLT 2.0 吗?将
xsl:for-each-group与“group-starting-with”一起使用会更容易解决。另外,你可以有超过 2 层的嵌套吗?谢谢! -
是的,我是。不,最多 2 个级别
标签: xslt