问题
从通配符模板匹配通过时,我的参数为空。
我的 xml 来源:
<c:control name="table" flags="all-txt-align-top all-txt-unbold">
<div xmlns="http://www.w3.org/1999/xhtml">
<thead>
<tr>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td> </td>
</tr>
</tbody>
</c:control>
我的 XSL:
最初的c:control[@name='table']
匹配是与更广泛的 XSL 体系结构有关,并从主模板中分离出调用
<xsl:template match="c:control[@name='table']">
<xsl:call-template name="table" />
</xsl:template>
然后它调用另一个文件中的命名模板,这不应该改变我的起始引用 - 我应该仍然能够引用 c:control[@name='table'] ,就好像我在匹配的模板中一样。
<xsl:template name="table">
<xsl:variable name="all-txt-top">
<xsl:if test="contains(@flags,'all-txt-align-top')">true</xsl:if>
</xsl:variable>
<xsl:variable name="all-txt-unbold" select="contains(@flags,'all-txt-unbold')" />
<div xmlns="http://www.w3.org/1999/xhtml">
<table>
<xsl:apply-templates select="xhtml:*" mode="table">
<xsl:with-param name="all-txt-top" select="$all-txt-top" />
<xsl:with-param name="all-txt-unbold" select="$all-txt-unbold" />
</xsl:apply-templates>
</table>
</div>
</xsl:template>
如果我all-txt-top
在上面的模板中得到值,它会按预期工作。但是,尝试将其传递给下面的模板失败了——我什么也没得到。
<xsl:template match="xhtml:thead|xhtml:tbody" mode="table">
<xsl:param name="all-txt-top" />
<xsl:param name="all-txt-unbold" />
<xsl:element name="{local-name()}">
<xsl:apply-templates select="*" mode="table" />
</xsl:element>
</xsl:template>
即使我尝试将一个简单的字符串作为参数传递 - 它也不会进入 xhtml:thead 模板。
不知道我哪里出错了......任何帮助将不胜感激。