<xsl:for-each select="A">
<tr>
<xsl:choose>
<xsl:when test="@a='True'">
<td bgcolor="#FFFF00"><xsl:value-of select="../@e"/></td>
<td bgcolor="#FFFF00"><xsl:value-of select="../@b"/></td>
<td bgcolor="#999999"><xsl:value-of select="@be"/></td>
<xsl:for-each select="T">
<td bgcolor="#FFFF00"><xsl:value-of select="@o"/></td>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<td bgcolor="#999999"><xsl:value-of select="../@e"/></td>
<td bgcolor="#999999"><xsl:value-of select="../@b"/></td>
<td bgcolor="#999999"><xsl:value-of select="@be"/></td>
<xsl:for-each select="T">
<td bgcolor="#999999"><xsl:value-of select="@o"/></td>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</tr>
我的 xslt 的这一部分制作了表格的行。
列是 ../@e、../@b、@be、@o
对于每个 A 元素,我在表中创建一行。
无论如何,第三列的单元格都有白色背景色。
所以:首先,前 2 列未满,只有前两列的第一个单元格必须是 full。它们的所有其他单元格都是空的。
但是,如果任何 A 元素中至少有一个 @i 属性为 True,则前 2 列(第 1 行)的单元格必须为黄色,以表明存在为 True 的 @i。
请帮我弄清楚。在过去的几天里,它变成了一场噩梦。先感谢您。
完整的 XSLT 转换是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
<!-- param values may be changed during the XSL Transformation -->
<xsl:param name="shared_item_name"> Animal </xsl:param>
<xsl:param name="description"> Birth </xsl:param>
<xsl:param name="properties"> Kind </xsl:param>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Problem</title>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="AA">
<table border="1" cellspacing="0">
<tr bgcolor="#9acd32">
<th> <xsl:value-of select="$shared_item_name" /> </th>
<th> <xsl:value-of select="$description" /> </th>
<th> <xsl:value-of select="$properties" /> </th>
<xsl:for-each select="IRO[position()=1]/P[position()=1]/T">
<th> <xsl:value-of select="@s" /> </th>
</xsl:for-each>
</tr>
<xsl:for-each select="AI">
<xsl:for-each select="A">
<tr>
<xsl:if test="position()=1">
<td><xsl:value-of select="../@e"/></td>
<td bgcolor="#999999"><xsl:value-of select="../@b"/></td>
</xsl:if>
<xsl:if test="not(position()=1)">
<td></td>
<td></td>
</xsl:if>
<td bgcolor="#999999"><xsl:value-of select="@be"/></td>
<xsl:choose>
<xsl:when test="@a='True'">
<xsl:for-each select="T">
<td bgcolor="#FFFF00"><xsl:value-of select="@o"/></td>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:for-each select="T">
<td bgcolor="#999999"><xsl:value-of select="@o"/></td>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
<xsl:for-each select="AI">
<xsl:for-each select="A">
<tr>
<xsl:choose>
<xsl:when test="@i='True'">
<td bgcolor="#FFFF00"><xsl:value-of select="../@e"/></td>
<td bgcolor="#FFFF00"><xsl:value-of select="../@b"/></td>
<td bgcolor="#999999"><xsl:value-of select="@be"/></td>
<xsl:for-each select="T">
<td bgcolor="#FFFF00"><xsl:value-of select="@o"/></td>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<td bgcolor="#999999"><xsl:value-of select="../@e"/></td>
<td bgcolor="#999999"><xsl:value-of select="../@b"/></td>
<td bgcolor="#999999"><xsl:value-of select="@be"/></td>
<xsl:for-each select="T">
<td bgcolor="#999999"><xsl:value-of select="@o"/></td>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</xsl:for-each>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>