我有一些简单的 xslt 模板,用于生成导航 - 导航渲染得很好,但我的一些标记被忽略。
我需要输出的标记与模板本身无关,但包含我不想用 JavaScript 注入(inject)的设计元素。
我的模板:
<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>
是否有另一种方法可以做到这一点,以便空元素将在模板中渲染出来?
最佳答案
你似乎正在生成html,如果你没有告诉xslt序列化为html,它将序列化为xml如 <sub/>
它使用 HTML 解析器作为开放标记进行解析 <sub>
这将导致您显示的树。
使用
<xsl:output method="html"/>
如果您没有生成 namespace 元素或
<xsl:output method="xhtml"/>
如果您使用 XSLT2 或 3 并生成 XHTML 命名空间元素或使用
<sub><xsl:text> </xsl:text></sub>
在样式表中,因此输出中有一个空格,因此您会得到 <sub> </sub>
而不是<sub/>
关于xml - XSLT 在输出中包含空元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27023487/