Мне нужно цвет строк в зависимости от значений данных. Если отдел «CIT», строка должна быть голубой; если это «COMP», желтый; если это «IS», розовый; что-нибудь еще, серое. У меня есть все, что нужно, но я становлюсь только серым. Это единственное, с чем у меня возникла проблема.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: noble. Избегая кода исправления, который потребляет несогласованный XML, вручную изменяя XML: не благородный. – kjhughes