我正在使用 XSLT 将 XML 文件转换为 HTML。部分转换包括输出导航栏。我有一些代码遍历树并获取每个部分的标题并将其作为列表项输出。但是,某些类型的部分是空的并且是完全生成的。当这些部分出现时,我需要能够在导航栏中插入一个默认标题。我正在使用xsl:choose
插入标题,但我无法找到匹配空元素的方法。
我查看了此处提到的其他解决方案,包括测试my-empty-element[. = '']
和my-empty-element[not(text())]
,但这些对我不起作用。我的 XML 文档的简化版本:
<book>
<section id="s1">
<title>Section 1 Title</title>
<!-- Other stuff here -->
</section>
<section-empty id="s2"/> <!-- My generated section -->
<section id="s3">
<title>Section 3 Title</title>
<!-- Other stuff here -->
</section>
</book>
编辑添加进一步解释:在本书的常规处理过程中,每个部分都被分解成一个单独的文件。在处理每个部分时,我包含<xsl:call-template name="navbar"/>
了导航栏,因此实际上从该部分调用了导航栏。
确认一下,空白部分的名称与常规部分的名称不同。这是我的 XSL 的简化版本:
<xsl:template name="navbar">
<!-- I call this template in at the location of the navbar in my HTML document -->
<xsl:apply-templates select="/book" mode="nav"/>
</xsl:template>
<xsl:template match="/book" mode="nav">
<nav class="mainnav"><ul>
<xsl:apply-templates select="section | section-empty" mode="nav"/>
</ul></nav>
</xsl:template>
<xsl:template match="section | section-empty" mode="nav">
<li><a>
<xsl:attribute name="id"><xsl:value-of select="./@id"/></xsl.attribute>
<xsl:choose>
<xsl:when test="self::section"><xsl:value-of select="./title/text()"/></xsl:when>
<xsl:when test="self::section-empty"><xsl:text>Generated Title</xsl:text></xsl:when>
<xsl:otherwise/>
</xsl:choose>
</a></li>
</xsl:template>
我也尝试创建一个单独的模板来匹配,book/section-empty[.='']
但这没有任何区别。我当前的输出如下所示:
<nav><ul>
<li><a href="s1">Section 1 Title</a></li>
<li><a href="s3">Section 3 Title</a></li>
</ul</nav>
我感谢任何人可以提供的任何帮助。
编辑以<xsl:attribute name="id">
在原始示例中包含关闭标记。
我的问题是模板匹配中元素名称的拼写错误。我有一个大写字母,小写字母应该是。在检查我的代码时我错过了它。Martin Honnen 确认我的代码应该可以工作,并鼓励使用更好的示例进行故障排除,这帮助我找到了我的错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句