我需要根据数据值对行进行着色。如果部门是" CIT"该行必须是青色的;如果它" COMP",黄色;如果它" IS",粉红色;什么别的,灰色的。我拥有所需的一切,但我只是灰色。这是我遇到问题的唯一方法。
XML代码:
<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<semester name="Fall 2016">
<class>
<dept> CIT </dept>
<number>270/L</number>
<title>Integrative Programming</title>
<prereq>CIT 160/L, COMP 182/L; MATH 103, 150A OR 255A</prereq>
</class>
<class>
<dept> SOC </dept>
<number>340</number>
<title>Sociology Of Work</title>
<prereq>SOC 150</prereq>
</class>
</semester>
<semester name="Spring 2017">
<class>
<dept> CIT </dept>
<number>360</number>
<title>System Management</title>
<prereq>CIT 210/L, 270/L</prereq>
</class>
</semester>
<semester name="Fall 2017">
<class>
<dept> CIT </dept>
<number>480/L</number>
<title> CIT System Design And Implementation1 </title>
<prereq>COMP 484/L, IS 451</prereq>
</class>
<class>
<dept> COMP </dept>
<number>424</number>
<title>Computer System Security</title>
<prereq>CIT 360, IS 435</prereq>
</class>
<class>
<dept> COMP </dept>
<number>484/L</number>
<title> Web Engineering I </title>
<prereq>CIT 360</prereq>
</class>
<class>
<dept> COMP </dept>
<number>485</number>
<title>Human Computer Interaction</title>
<prereq>CIT 360, IS 451</prereq>
</class>
</semester>
<semester name="Spring 2018">
<class>
<dept> CIT </dept>
<number>481/L</number>
<title>CIT System Design And Implementation II</title>
<prereq>CIT 480/L</prereq>
</class>
XSLT代码:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Path to Graduation</h2>
<xsl:for-each select="catalog/semester">
<h2><xsl:value-of select="@name"/></h2>
<table border="1">
<tr bgcolor="lightgreen">
<th style="align:center;width:120px;">Catalog Number</th>
<th style="align:center;width:350px;">Title</th>
<th style="align:center;width:300px;">Prerequisites</th>
</tr>
<xsl:for-each select="class">
<xsl:choose>
<xsl:when test="dept='CIT'">
<tr bgcolor="cyan">
<td align="center"><xsl:value-of select="dept"/>
<xsl:value-of select="number"/></td>
<td align="center"><xsl:value-of select="title"/></td>
<td align="center"><xsl:value-of select="prereq"/></td>
</tr>
</xsl:when>
<xsl:when test="dept='IS'">
<tr bgcolor="pink">
<td align="center"><xsl:value-of select="dept"/>
<xsl:value-of select="number"/></td>
<td align="center"><xsl:value-of select="title"/></td>
<td align="center"><xsl:value-of select="prereq"/></td>
</tr>
</xsl:when>
<xsl:when test="dept='COMP'">
<tr bgcolor="yellow">
<td align="center"><xsl:value-of select="dept"/>
<xsl:value-of select="number"/></td>
<td align="center"><xsl:value-of select="title"/></td>
<td align="center"><xsl:value-of select="prereq"/></td>
</tr>
</xsl:when>
<xsl:otherwise>
<tr bgcolor="grey">
<td align="center"><xsl:value-of select="dept"/>
<xsl:value-of select="number"/></td>
<td align="center"><xsl:value-of select="title"/></td>
<td align="center"><xsl:value-of select="prereq"/></td>
</tr>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</table>
</xsl:for-each>
</body>
</html>
</xsl:template>
答案 0 :(得分:1)
由于前导和尾随空格,您对xsl:when
的{{1}}次测试失败。
针对dept
而不是normalize-space(dept)
进行测试,以消除此问题。
答案 1 :(得分:0)
您需要在XML中修复或在XSLT中进行调整以修剪空格,
node
中有空格,因此您的情况失败,
问题节点:
<dept> CIT </dept>
正确的节点:
<dept>CIT</dept>
我修复了您可以找到工作的XML:http://xsltransform.net/ejivdHb/28
或者您可以使用以下方法修复XSL,
使用normalize-space()
<xsl:when test="normalize-space(dept)='CIT'">
使用正则表达式。
<!-- (XSL 2.0) -->
<xsl:when test="replace(dept, '^\s+|\s+$', '')='CIT'">
答案 2 :(得分:0)
这是一种更好的编写代码的方法,它不仅可以解决空白问题,还可以使用模板规则“XSLT方式”。
$value = utf8_encode($value);
下周的课程:HTML5表格模型和CSS。