名称和空间中的CSS空间麻烦的XSLT

时间:2011-06-13 21:45:32

标签: css xslt xpath

我正在尝试创建一个列出电影的XSLT,我正在设置标题样式,以便每个标题都有自己的颜色,然后选择带插值的标题(XPath?)

这是XSL文件:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <html>
        <head>
            <title>Videos</title>
            <style>
                table, tr, td { border: thin black solid }
                th { background-color: #AAFFAA }
                .Daredevil { color: red; }

                /* Look at those spaces! Hrmphf! */
                .Drag Me To Hell { color: green; }
            </style>
        </head>
        <body>
            <table>
                <tr><th>Movies</th></tr>
                <xsl:apply-templates select="//movie"/>
            </table>
        </body>
    </html>
</xsl:template>
<xsl:template match="//movie[not(@title=preceding::movie/@title)]">

    <!-- Title should be the one of the titles in the CSS -->
    <tr class="{@title}"><td><xsl:value-of select="@title"/></td></tr>

</xsl:template>
</xsl:stylesheet>

但问题是某些电影标题包含空格。我可以在名字中加上空格吗?如果没有,是否有任何变通方法(除了在XML中有下划线等)?


更新

好的,我知道这是不可能的。目前我正在使用translate(@title, ' ', '-')当CSS名称由-分隔时,它可以正常工作。我仍然想知道是否有更好的方法来做到这一点。 :)

4 个答案:

答案 0 :(得分:5)

class="Drag me to"创建一个包含三个不同类的元素。

选择器.Drag.Me.To将匹配所有三个类的元素。

但是,它会以任何顺序匹配它们,并且不会计算重复项。

答案 1 :(得分:3)

不,CSS规则名称中不能有空格

答案 2 :(得分:3)

CSS classes / ids不能包含空格。

由于空格用于分隔不同的类别。

您必须解析为( - )

答案 3 :(得分:2)

以这种方式将CSS与实际数据内容联系起来感觉有点奇怪。您的样式表似乎事先知道它希望在数据文件中找到什么,这感觉就像糟糕的设计 - 它应该是通用的。为什么不引入从电影标题到CSS类的间接:

<xsl:variable name="movieStyles">
  <movie title="Drag me to hell" css-class="hell-class"/>
  <movie ...
</xsl:variable>

然后<tr class="{f:css-class-for-title(@title)}" ...

其中函数f:css-class-for-title使用查找数据将电影标题映射到CSS类。