<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元素中至少有一个@i属性为True,则前2列(1ST ROW)的单元格必须为黄色,表示有@我是真的。
请帮我解决一下。在过去的几天里,它已经变成了一场噩梦。 提前谢谢。
完整的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>
答案 0 :(得分:2)
这是一次尝试,但您的要求缺乏一定的精确度。
<?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"/>
<xsl:param name="shared_item_name"> Shared Item Name </xsl:param>
<xsl:param name="description"> Description </xsl:param>
<xsl:param name="properties"> Properties </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="IR">
<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[1]/P[1]/T">
<th> <xsl:value-of select="@s" /> </th>
</xsl:for-each>
</tr>
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="P">
<tr>
<xsl:choose>
<xsl:when test='count(preceding-sibling::P)=0'>
<xsl:variable name='c'>
<xsl:choose>
<xsl:when test='(@i="True") or (count(following-sibling::P[@i="True"]) > 0)'>#FFFF00</xsl:when>
<xsl:otherwise>#999999</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<td><xsl:attribute name='bgcolor'><xsl:value-of select='$c' /></xsl:attribute><xsl:value-of select='../@n' /></td>
<td><xsl:attribute name='bgcolor'><xsl:value-of select='$c' /></xsl:attribute></td>
<td bgcolor="#999999"><xsl:value-of select='@dn' /></td>
</xsl:when>
<xsl:otherwise>
<td></td>
<td></td>
<td bgcolor="#999999"><xsl:value-of select='@dn' /></td>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates />
</tr>
</xsl:template>
<xsl:template match="T">
<td>
<xsl:attribute name='bgcolor'>
<xsl:choose>
<xsl:when test='../@i="True"'>#FFFF00</xsl:when>
<xsl:otherwise>#999999</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<xsl:value-of select='@v' />
</td>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
附加要求:
<?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"/>
<xsl:param name="shared_item_name"> Shared Item Name </xsl:param>
<xsl:param name="description"> Description </xsl:param>
<xsl:param name="properties"> Properties </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="IR">
<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[1]/P[1]/T">
<th> <xsl:value-of select="@s" /> </th>
</xsl:for-each>
</tr>
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="/IR/IRO/P">
<tr>
<xsl:choose>
<xsl:when test='count(preceding-sibling::P)=0'>
<xsl:variable name='c'>
<xsl:choose>
<xsl:when test='(@i="True") or (count(following-sibling::P[@i="True"]) > 0)'>
<xsl:choose>
<xsl:when test='count(../descendant::P[@i="True"]) > 0'>#ff0000</xsl:when>
<xsl:otherwise>#FFFF00</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test='count(../descendant::P[@i="True"]) > 0'>#FF6600</xsl:when>
<xsl:otherwise>#999999</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<td><xsl:attribute name='bgcolor'><xsl:value-of select='$c' /></xsl:attribute><xsl:value-of select='../@n' /></td>
<td><xsl:attribute name='bgcolor'><xsl:value-of select='$c' /></xsl:attribute></td>
<td bgcolor="#999999"><xsl:value-of select='@dn' /></td>
</xsl:when>
<xsl:otherwise>
<td></td>
<td></td>
<td bgcolor="#999999"><xsl:value-of select='@dn' /></td>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates />
</tr>
</xsl:template>
<xsl:template match="/IR/IRO/IRO/P">
<tr>
<xsl:choose>
<xsl:when test='count(preceding-sibling::P)=0'>
<xsl:variable name='c'>
<xsl:choose>
<xsl:when test='(@i="True") or (count(following-sibling::P[@i="True"]) > 0)'>#FFFF00</xsl:when>
<xsl:otherwise>#999999</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<td><xsl:attribute name='bgcolor'><xsl:value-of select='$c' /></xsl:attribute><xsl:value-of select='../@n' /></td>
<td><xsl:attribute name='bgcolor'><xsl:value-of select='$c' /></xsl:attribute></td>
<td bgcolor="#999999"><xsl:value-of select='@dn' /></td>
</xsl:when>
<xsl:otherwise>
<td></td>
<td></td>
<td bgcolor="#999999"><xsl:value-of select='@dn' /></td>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates />
</tr>
</xsl:template>
<xsl:template match="T">
<td>
<xsl:attribute name='bgcolor'>
<xsl:choose>
<xsl:when test='../@i="True"'>#FFFF00</xsl:when>
<xsl:otherwise>#999999</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
<xsl:value-of select='@v' />
</td>
</xsl:template>
</xsl:stylesheet>
在这种情况下,必须区分2个P元素级别的模板