<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元素,我在表中创建一个行。
第3列的单元格有白色背景颜色无论如何。
所以: 首先前两列未满并且只有第一个两列的第一个单元格必须已满。所有其他的细胞都是空的。
但是如果任何A元素中至少有一个属性为真,则前2列(1ST行)的单元格必须是黄色的,以表明存在@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>
你能插入XML源的改造,以及完整的XSLT? – 2012-07-11 08:07:23
@YvesB我插入了它。希望你的建议:\我迷路了! – 2012-07-11 08:21:23
恐怕您还需要提供预期的HTML,因为您的解释不容易理解。 – 2012-07-11 09:37:56