我正在尝试创建一个列出电影的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名称由-
分隔时,它可以正常工作。我仍然想知道是否有更好的方法来做到这一点。 :)
答案 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类。