0

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" />&amp;b=<xsl:value-of select="from/longitude" />&amp;c=<xsl:value-of select="to/latitude" />&amp;d=<xsl:value-of select="to/longitude" />&amp;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 ファイルでスタイリングを適用する正しい方法ですか?

4

1 に答える 1

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>
于 2013-02-17T10:44:10.010 に答える