我在DotNetNuke的DDR Treeview菜单上工作,只显示选定的Root项及其要扩展的子节点。这就是我想要实现的目标。 (左垂直菜单) 有什么建议吗?
这是xslt代码,目前显示所有根项。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:param name="ControlID" />
<xsl:param name="Options" />
<xsl:template match="/*">
<xsl:apply-templates select="root" />
</xsl:template>
<xsl:template match="root">
<xsl:if test="node">
<ul class="treeview filetree" id="{$ControlID}">
<xsl:apply-templates select="node" />
</ul>
<script type="text/javascript">
jQuery(function($) {
$("#<xsl:value-of select="$ControlID" />").treeview(
<xsl:value-of select="$Options" disable-output-escaping="yes" />
);
});
</script>
</xsl:if>
</xsl:template>
<xsl:template match="node">
<li>
<xsl:if test="node and (@depth != 0 or @breadcrumb = 1)">
<xsl:attribute name="class">open</xsl:attribute>
</xsl:if>
<xsl:choose>
<xsl:when test="@enabled = 0">
<xsl:value-of select="@text" />
</xsl:when>
<xsl:otherwise>
<a href="{@url}">
<xsl:choose>
<xsl:when test="@selected=1">
<xsl:attribute name="class">selected breadcrumb</xsl:attribute>
</xsl:when>
<xsl:when test="@breadcrumb=1">
<xsl:attribute name="class">breadcrumb</xsl:attribute>
</xsl:when>
</xsl:choose>
<xsl:value-of select="@text" />
</a>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="node">
<ul style="list-item-style:none">
<xsl:apply-templates select="node" />
</ul>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
如果您提供了要转换的输入代码示例,那将会有所帮助。
我认为它基本上是这样的:
<root>
<node enabled="1" depth="1" text="Service" selected="true" breadcrumb="0"/>
<node>
<node>
<node/>
</node>
</node>
<node>
<node/>
</node>
<node/>
</root>
你可以跳过第一个模板匹配和第一个if-element,直接匹配你感兴趣的东西。没有测试,这样的东西应该可以解决问题:
<!-- ... -->
<!-- process only "root" elements that have at least one "node" element -->
<xsl:template match="/root[node]">
<ul class="treeview filetree" id="{$ControlID}">
<xsl:apply-templates select="node" />
</ul>
<!-- ... -->
</xsl:template>
<xsl:template match="node">
<!-- ... -->
</xsl:template>
答案 1 :(得分:1)
如果没有源XML,很难找出你在这里尝试做的事情,但是我说你得到所有节点的主要原因是匹配的模板node
元素是递归的,不会隐藏后代。如果您将display:none
添加到style
模板末尾ul
元素的node
属性中(或将list-item-style
更改为display
) ,你可能得到你想要的东西。
答案 2 :(得分:0)
如果您只获取根项目,则需要更改为菜单定义的NodeSelector
。我相信速记值RootChildren
会给你你想要的东西。