我需要根据数据值对行进行着色。如果部门是“CIT”,则该行必须是青色的;如果它是“COMP”,黄色;如果它是“是”,粉红色;别的,灰色。我拥有一切,因为它需要,但我只得到灰色。这是我遇到问题的唯一方法。XSLT无法根据元素值对行着色?
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>
通常作为开发人员,我们应该使代码更健壮,而不是更改输入数据以适应现有代码。鉴于我已经[已经显示](http://stackoverflow.com/a/41008397/290085)OP如何使XSLT更健壮,这是相当奇怪的(而且相当适得其反)你现在建议OP改变改为输入XML。 – kjhughes
@kjhughes OP XML不一致。只有一些节点具有导致这些失败条件的空间。所以对我来说,最好是建议OP使输入XML保持一致。我希望你对此表示赞同。 – ScanQR
修复产生不一致XML的代码:高贵。通过手动更改XML来避免修复消耗不一致XML的代码:并非高贵。 – kjhughes