我有一些简单的xslt模板,我用它来生成导航 - 导航渲染正常,但我的部分标记被忽略了。
我需要输出的标记与模板本身无关,但包含我不想用javascript注入的设计元素。
我的模板:
<xsl:template match="Rows">
<nav id="nav">
<a href="#" role="button" data-toggle="dropdown" class="opener">
<span class="ico">
<sub />
<sub />
<sub />
</span>
<span>Menu</span>
</a>
<xsl:apply-templates select="Row[@FileDirRef = '/Lists/GlobalNavigation/GlobalNav']">
<xsl:sort select="@DisplayOrder"/>
</xsl:apply-templates>
</nav>
</xsl:template>
但是空的<sub>
元素呈现为嵌套元素:
<span class="ico">
<sub>
<sub>
<sub>
</sub>
</sub>
</sub>
是否有其他方法可以在模板中渲染出空元素?
答案 0 :(得分:3)
你似乎正在生成html,如果你没有告诉xslt序列化为html它将序列化为xml为<sub/>
,它使用HTML解析器作为开放标记<sub>
进行解析,这将导致你展示的那棵树。
使用
<xsl:output method="html"/>
如果您没有生成名称空间元素或
<xsl:output method="xhtml"/>
如果您正在使用XSLT2或3并生成XHTML名称空间元素或使用
<sub><xsl:text> </xsl:text></sub>
样式表中的因此输出中有一个空格,因此您得到<sub> </sub>
而不是<sub/>