我的XSLT代码只有一个类元素不同。但是,所有内部div内容。
我试图将起始标签分开:
<xsl:if test="position() = 1">
<div class="position first">
</xsl:if>
<xsl:if test="position() != 1">
<div class="position">
</xsl:if>
但是当然它产生了无效的XSLT代码。 [DIV&#39; s必须在其范围内关闭]。
是否有另一种方法可以添加可选的class关键字,而不必重复内部内容?
答案 0 :(得分:3)
试试这个:
<div class="position">
<xsl:if test="position() = 1">
<xsl:attribute name="class">position first</xsl:attribute>
</xsl:if>
</div>
xsl:attribute
指令应覆盖文字属性。
答案 1 :(得分:1)
您可以使用xsl:choose
。下面给出了一个示例模板
<xsl:template match="div">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:choose>
<xsl:when test="position() = 1">
<xsl:attribute name="class">position first</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="class"><xsl:value-of select="concat('position', position())"/></xsl:attribute>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
答案 2 :(得分:1)
这是一种替代方法,您可以在不重复使用XSLT中的“position”类的情况下执行此操作:
<div class="position{substring(' first', 1, 6 * (position() = 1))}">
<!-- Whatever goes inside the div -->
</div>
你可以在XSLT 2.0中更干净地做到这一点:
<div class="position{if (position() = 1) then ' first' else ''}">
<!-- Whatever goes inside the div -->
</div>