【发布时间】:2015-01-27 18:35:25
【问题描述】:
我有这个 html
<h1>Index</h1>
<p>some content</p>
<p>some more content</p>
<h1>Tema</h1>
<p>some content</p>
<p>other content</p>
<h2>Sección</h2>
<p>some content</p>
<p>other content</p>
<h2>Unidad</h2>
<p>some content</p>
<p>other content</p>
使用这个,我必须创建一个嵌套菜单,如下所示(没有 cmets,这些只是为了解释):
<div id="siteNav">
<ul>
<li>
<a href="index.html" class="daddy">
Index <!-- H1 -->
</a></li>
<li>
<a href="tema.html" class="daddy">
Tema <!-- H1 -->
</a>
<ul>
<li>
<a href="seccion.html" class="daddy">
Sección <!-- H2 -->
</a>
<ul>
<li id="active">
<a href="unidad.html" class="no-ch">
Unidad <!-- H3 -->
</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
我的部分解决方案是使用 PHP 修改 html 以对标题进行分组:
<div class='menu'>
<h1>Index</h1>
<p>some content</p>
<p>some more content</p>
</div>
<div class='menu'>
<h1>Tema</h1>
<p>some content</p>
<p>other content</p>
<div class='menu2'>
<h2>
...
</h2>
</div>
</div>
然后应用下面的 xsl 模板:
<xsl:template match="/">
<ul>
<xsl:apply-templates/>
</ul>
</xsl:template>
<xsl:template match="div[@class='menu']">
<li>
<xsl:if test="count(div[@class='menu2']) > 0">
<xsl:attribute name='class'>
daddy
</xsl:attribute>
<xsl:value-of select='h1' />
</xsl:if>
<xsl:if test="count(div[@class='menu2']) > 0">
<ul class='other-section'><xsl:apply-templates select="div[@class='menu2']"/></ul>
</xsl:if>
</li>
</xsl:template>
<xsl:template match="div[@class='menu2']">
<li>
<a>
<xsl:attribute name='href'>
<xsl:value-of select="concat(translate(h2, 'áéíóú ', 'aeiou-'),'.html')" />
</xsl:attribute>
<xsl:value-of select='h2'/>
</a>
</li>
</xsl:template>
有没有一种纯粹的 XSLT 1.0 方法可以做到这一点?
【问题讨论】:
-
您想要的结果有
Unidad <!-- H3 -->,但您的输入样本有<h2>Unidad</h2>。 -
class值(“daddy”、“no-ch”)从何而来?