我有以下XML網站地圖文件:XSL遞歸軸故障?
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="NewSiteMap.xsl"?>
<siteMap>
<siteMapNode
url="~/UsingMasterTemplate.aspx?id=1"
title="Home"
description="AAAAAAAAAAAAAAAAAAA">
<siteMapNode
url="~/UsingMasterTemplate.aspx?id=2"
title="Profile"
description="BBBBBBBBBBBBBBBBBB" />
<siteMapNode
url="~/UsingMasterTemplate.aspx?id=3"
title="People"
description="CCCCCCCCCCCCCCCCCCCCCCCC" />
<siteMapNode
url="~/UsingMasterTemplate.aspx?id=5"
title="New Page"
description="DDDDDDDDDDDDDDDDDDDD" />
</siteMapNode>
</siteMap>
而下面的XSL文件做遞歸和輸出到UL:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method='xml' version='1.0' omit-xml-declaration="yes" encoding='UTF-8' indent='yes'/>
<xsl:template match="siteMap">
<!--
<xsl:variable name='siteMapNode'>
<xsl:value-of select='siteMap/siteMapNode'/>
</xsl:variable>
-->
<html>
<head>
<link rel="stylesheet" href="xSiteMap.css" type="text/css" />
</head>
<body>
<h2>SiteMap:</h2>
<ul>
<!-- Check for empty sitemap -->
<xsl:if test='siteMapNode'>
<xsl:call-template name='BuildNavList'>
<xsl:with-param name='siteMapNode' select='siteMapNode'/>
</xsl:call-template>
</xsl:if>
</ul>
</body>
</html>
</xsl:template>
<xsl:template name='BuildNavList'>
<xsl:param name='siteMapNode'/>
<li>
<a>
<xsl:attribute name="href">
<xsl:value-of select="$siteMapNode/@url"/>
</xsl:attribute>
<xsl:attribute name="title">
<xsl:value-of select="$siteMapNode/@description"/>
</xsl:attribute>
<xsl:value-of select="$siteMapNode/@title"/>
</a>
<!-- test for node-children, if true then recursion -->
<xsl:if test='$siteMapNode/node()'>
<ul>
<xsl:for-each select="$siteMapNode/node()">
<xsl:call-template name='BuildNavList'>
<xsl:with-param name='siteMapNode' select='$siteMapNode/node()'/>
</xsl:call-template>
</xsl:for-each>
</ul>
</xsl:if>
</li>
</xsl:template>
</xsl:stylesheet>
但似乎是一個錯誤在我的遞歸調用(propably我的for-each語句中出現軸錯誤)!這裏出了什麼問題?
好問題,+1。查看我的答案,以獲得最大限度地使用XSLT模板匹配並且在任何模板內都沒有條件的解決方案。 :) – 2010-11-01 13:30:12