我想为备用表格行添加颜色。我想使用以下方法:
<xsl:template match="tr">
<xsl:attribute name="bg-color">
<xsl:choose>
<xsl:when test= position() mod 2 = 0><xsl:text>#CCCCCC</xsl:text></xsl:when>
<xsl:otherwise>#DDDDDD</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:template>
但事情是节点<tr>
也是标记<tr>
的子节点。如何获得父<tr>
位置?
<table>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<tr><td>3</td><td>4</td></tr>
<tr><td>5</td><td>6</td></tr>
</tr>
...
</table>
如何过滤<tr>
内的<tr>
?
答案 0 :(得分:0)
您可以使用更具判别性的匹配,例如,如果您不能超过1级:
<xsl:template match="table/tr/td/table/tr">
将应用于包含在第2级表中的tr的模板可能与另一个不同。
或者你可以在match =“tr”中为每个找到的表/ tr / td使用一个调用模板(到命名的tempate)。
或者您可以使用xsl检查祖先是否为tr:if:
<xsl:if test="ancestor::tr">
您已经检查了模块性,如果您不想添加模板,只需添加条件,例如:
test="position() mod 2 = 0 and not ancestor::tr"
答案 1 :(得分:0)
如果您使用match="table/tr"
,则模板仅匹配tr
父元素的子元素table
元素。但是,在HTML表模型中,无法将tr作为tr的子项。
答案 2 :(得分:0)
<xsl:if test="ancestor::tr">
和test="position() mod 2 = 0 and not ancestor::tr"
是我个案的最佳选择。