我试图解析一个xml,我需要根据第一个单独的position()更改div标签的属性。如您所见,我已经使用了父div的应用模板。如何在应用模板中单独应用第一个div的条件?
<div class="maintitle">
<xsl:apply-templates select="title"/>
</div>
<xsl:template match="title">
<h3 class="sub title">
<span>
<a href="............"></a>
</span>
</h3>
<div class="slide">
<!-- ... html chunk ... -->
</div>
</xsl:template>
但是对于应用模板中的第一个div应该是
<h3 class="sub title">
<span>
<a href="............"></a>
</span>
</h3>
<div class="first slide">
<!-- ... html chunk ... -->
</div>
答案 0 :(得分:0)
由于您没有显示输入的内容,因此任何答案都会涉及一些猜测。
但总的来说,有两种方法可以使XSLT处理系列的第一个元素与其他元素不同。
首先,您可以制作两个不同的模板,一个用于第一个title
元素,另一个用于其他元素:
<xsl:template match="title">
<!--* handling for most title elements *-->
</
<xsl:template match="title[1]">
<!--* handling for the first title *-->
</
在这种情况下,这可能涉及到比模板代码更多的重复。
其次,您可以使用条件来包围相关代码。在这里,使用XSL属性构造函数而不是文字结果属性将简化:
<xsl:template match="title">
<h3 class="sub title">
<span>
<a href="............"></a>
</span>
</h3>
<div>
<xsl:attribute name="class">
<xsl:if test="position() = 1">
<xsl:text>first</xsl:text>
</xsl:if>
<xsl:text> slide</xsl:text>
</xsl:attribute>
<!-- ... html chunk ... -->
</div>
</xsl:template>
这些假设:
title
元素都会在输出中变成一张幻灯片; title
元素是兄弟姐妹; title
元素不与其他类型的元素混合。 如果这些假设不成立,那么您编写match
模式或test
条件的方式将与显示的不同。