我在XSLT文件中设置样式元素,因此所有样式都在这里完成。我想从最后一个列表元素中删除边框底部,但不知道如何在XSLT中应用它。这是我的代码:
<xsl:element name="div">
<xsl:attribute name="style">
<xsl:text>width:120px; margin:0 auto; padding: 0; border: 1px solid black; border-radius: 15px;padding-bottom: 20px; background: #6A819E; margin-top: 20px;</xsl:text>
</xsl:attribute>
<xsl:element name="ul">
<xsl:attribute name="style">
<xsl:text>width:120px; margin:0 auto; padding: 0; background: #6A819E;</xsl:text>
</xsl:attribute>
<xsl:for-each select="flights/flight">
<xsl:apply-templates select="route" />
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="route">
<xsl:element name="li">
<xsl:attribute name="style">
<xsl:text>list-style-type:none; width:120px; margin:0 auto; margin-top: 20px; border-bottom: 1px solid black; text-align:center; background: #6A819E;</xsl:text>
<xsl:if test="position() = last()">border: none;</xsl:if>
</xsl:attribute>
<a><xsl:attribute name="href">map.php?a=<xsl:value-of select="from/latitude" />&b=<xsl:value-of select="from/longitude" />&c=<xsl:value-of select="to/latitude" />&d=<xsl:value-of select="to/longitude" />&e=<xsl:value-of select="routename" /></xsl:attribute><xsl:attribute name="style">
<xsl:text> text-decoration:none; color:black;</xsl:text>
</xsl:attribute>
<xsl:value-of select="routename" />
</a>
</xsl:element>
你可以在列表样式中看到我在最后应用last-child,我现在这是错的,但我想不出另一种方法来做到这一点。我还可以问一下,这是使用XSLT文件应用样式的正确方法吗?
答案 0 :(得分:1)
你应该尝试类似的东西:
<xsl:attribute name="style">
<xsl:text>list-style-type:none; width:120px; margin:0 auto; margin-top: 20px; border-bottom: 1px solid black; text-align:center;</xsl:text>
<xsl:if test="position() = last()">border: none;</xsl:if>
</xsl:attribute>
您也可以使用CSS类而不是使用内联样式。在这种情况下,您应该能够使用CSS中的last-child选择器(但是,IE7,IE8(http://caniuse.com/#search=%3Alast-child)不支持此选择器。
更新1:如果存在插入路径元素的文本节点,则上述操作无效,因此不同的方法是为最后一个元素使用不同的模板。
<xsl:template match="route[last()]">
<!-- Special behavior for last element -->
</xsl:template>
更新2:使用if语句而忽略与路由不同的所有节点的另一个选项是:
<xsl:if test="not(following-sibling::route)">border:none;</xsl:if>