这是我调用生成菜单的一个模板,它有点中断。使用Xalan,我得到了堆大小错误,所以我的猜测是它中的某些东西可怕地破碎和不圣洁。XSLT菜单生成问题
我预设的模板网站树的所述当前部分,喂养它从网站,语言,目前depht(P-I),和过滤器的根的路径。 >
这是应该做的是选择当前级别上的所有内容,然后进行下一次迭代,应该像再次调用时更新“nextLevel”一样简单,用于下一级菜单...
帮助?
编辑:据我所知,只要我不进入递归,它就会工作。我得到了我的depht参数指定的第一个级别,仅此而已。
该网站的组织是这样的:
<?xml version="1.0"?>
<site xsi:noNamespaceSchemaLocation="onepagev2.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<page pagename="Alpha">
<language langname="en" path="./en/Alpha" dephtCount="3">
<title>Alpha Anglo</title>
<content>Oh noes.</content>
</language>
<language langname="fr" path="./fr/Alpha" dephtCount="3">
<title>Alpha Franco</title>
<content>Oh non.</content>
</language>
</page>
<page pagename="Beta">
<language langname="en" path="./en/Beta" dephtCount="3">
<title>Beta Anglo</title>
<content>Content B is content B is content B!</content>
</language>
<language langname="fr" path="./fr/Beta" dephtCount="3">
<title>Beta Franco</title>
<content>Contenu B est contenu B est contenu B!</content>
</language>
</page>
<page pagename="Beta2">
<language langname="en" path="./en/Beta/Beta2" dephtCount="4">
<title>Beta Anglo</title>
<content>Content B is content B is content B!</content>
</language>
<language langname="fr" path="./fr/Beta/Beta2" dephtCount="4">
<title>Beta Franco</title>
<content>Contenu B est contenu B est contenu B!</content>
</language>
</page>
</site>
模板:
<xsl:template name="menubuildr">
<xsl:param name="p-path"/>
<xsl:param name="p-lang"/>
<xsl:param name="p-i" select="2"/>
<xsl:param name="p-filter"/>
<xsl:param name="p-max"/>
<xsl:if test="$p-i < $p-max">
<ul>
<xsl:variable name="nextLevel">
<xsl:for-each select="str:split(string($p-path),'/')">
<xsl:if test="position()<$p-i + 1">
<xsl:value-of select="."/>
<xsl:if test="position()<($p-i)">
<xsl:text>/</xsl:text>
</xsl:if>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:for-each
select="/site/page/language[
starts-with(@path,$p-filter)
and @dephtCount = ($p-i)
and $p-lang = @langname]">
<li>
<xsl:value-of select="@path"/>
<xsl:text>:</xsl:text>
<xsl:value-of select="@dephtCount"/>
<xsl:call-template name="menubuildr">
<xsl:with-param name="p-lang" select="$p-lang" />
<xsl:with-param name="p-filter" select="$nextLevel"/>
<xsl:with-param name="p-i" select="$p-i + 1"/>
<xsl:with-param name="p-path" select="$p-path"/>
<xsl:with-param name="p-max" select="$p-max"/>
</xsl:call-template>
</li>
</xsl:for-each>
</ul>
</xsl:if>
</xsl:template>
样品电话:
<div class="menu">Menu
<xsl:call-template name="menubuildr">
<xsl:with-param name="p-lang" select="@langname" />
<xsl:with-param name="p-filter">
<xsl:text>./</xsl:text>
<xsl:value-of select="@langname"/>
</xsl:with-param>
<xsl:with-param name="p-i" select="2"/>
<xsl:with-param name="p-path" select="@chemin"/>
<xsl:with-param name="p-max" select="count(str:split(string(@chemin),'/'))"/>
</xsl:call-template>
<hr/>
</div>
我不明白的地方你描述该网站的组织部分。你不能只提供模板设计用于处理的文档中的示例吗? – Welbog 2009-10-02 14:11:15
立即执行此操作 – 2009-10-02 14:41:54
对模板的示例呼叫也将有所帮助。 – Keith 2009-10-02 16:29:57