-1
我有以下XML输出:XSL转换XML到下拉HTML菜单
<payload>
<MenuItems>
<id>1</id>
<menuTitle>Members</menuTitle>
<description/>
<menuURL>members</menuURL>
<menuTarget/>
<parentID>0</parentID>
</MenuItems>
<MenuItems>
<id>2</id>
<menuTitle>Tiers</menuTitle>
<description/>
<menuURL>tiers</menuURL>
<menuTarget/>
<parentID>1</parentID>
</MenuItems>
</payload>
,我需要它(使用XSLT)转换成HTML菜单,如下所示:
<ul class="nav navbar-nav">
<li class="active"><a href="menuURL">menuTitle</a></li>
<li class="dropdown">
<a href="menuURL" class="dropdown-toggle" data-toggle="dropdown">menuTitle <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="menuURL">menuTitle</a></li>
</ul>
</li>
</ul>
换句话说,顶级菜单项(其中parentID = 0)应显示在主菜单中。
子菜单项(其中的parentID =父菜单项的ID,应显示在该父的下拉菜单。
这似乎应该是一个简单的变换使用XSL,但是对于一些原因我似乎无法得到它的工作。
任何意见,将不胜感激。
这里的电流XSL我一直在使用,我觉得这是非常接近(主菜单项拉正确),但我不能完全得到子菜单拉。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" omit-xml-declaration="yes" standalone="no" indent="yes"/>
<xsl:template match="pkgInfo">
<xsl:for-each select="payload">
</xsl:for-each>
</xsl:template>
<xsl:template match="payload">
<ul class="nav navbar-nav">
<xsl:apply-templates select="MenuItems[parentID=0]"/>
</ul>
</xsl:template>
<xsl:template match="MenuItems">
<li><a href="{menuURL}"><xsl:value-of select="menuTitle"/></a></li>
<xsl:param name="currentParent" select="id" />
<xsl:apply-templates select="MenuItems[parentID=$currentParent]"/>
</xsl:template>
<xsl:template match="MenuItems">
<li class="dropdown">
<a href="{menuURL}" class="dropdown-toggle" data-toggle="dropdown">
<xsl:value-of select="menuTitle"/> <b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="menuURL"><xsl:value-of select="menuTitle"/></a></li>
</ul>
</li>
</xsl:template>
</xsl:stylesheet>
谢谢,我觉得我真的很接近,但我不能完全弄清楚如何让子菜单正确拉出。 – user3304420