请教一XSL问题,查找半天无头绪,望指教。
问题有二:(1)如何传递特殊字符?(如<,>,<=)我是转换成汉字给传递到xsl里的
(2) 下面出现的数据中,前面4列是固定的,到出现等级后是动态的,
如何在xsl文件里面将等级这几列中加入input,其余列不需要加。
上代码:
连接数据库,查找数据,查找数据为:姓名 年龄 班次 比较 等级一 等级二 等级三。
xxx 12 1 < 90 80 70
xxx 11 2 <= 90 80 70
......
DataTable dt
其中,等级一,二,三不固定,也就是说,有可能有的班级只有等级一,等级二,无等级三。
Response.ContentType = "text/xml";
Response.Write("<?xml version=\"1.0\" encoding=\"GB2312\"?>\n");
Response.Write("<?xml-stylesheet type=\"text/xsl\"?>\n");
Response.Write("<NewDataSet>\n");
for (int i = 0; i < dt.Rows.Count; i++)
{
Response.Write("<Table>\n");
for (int j = 0; j < dt.Columns.Count; j++)
{
<!-- 问题(1)-->
switch (dt.Rows[i][j].ToString())
{
case "<":
dt.Rows[i][j] = "小于";
break;
case "<=":
dt.Rows[i][j] = "小于等于";
break;
case ">":
dt.Rows[i][j] = "大于";
break;
case ">=":
dt.Rows[i][j] = "大于等于";
break;
case "between":
dt.Rows[i][j] = "介于";
break;
default:
break;
}
lo_value = dt.Rows[i][j];
ls_col_name = dt.Columns[j].ColumnName.ToUpper();
if (lo_value == System.DBNull.Value)
{
Response.Write("<" + ls_col_name + "></" + ls_col_name + ">\n");
}
else
{
Response.Write("<" + ls_col_name + ">" + lo_value.ToString() + "</" + ls_col_name + ">\n");
}
}
Response.Write("</Table>\n");
}
Response.Write("</NewDataSet>");
Response.End();
下面用到XSL:
<table id="DataTable" width="100%" cellspacing="1" CellPadding="3" class="GridCss" border="1" style="BORDER-COLLAPSE:collapse">
<!--这段显示列名-->
<tr >
<xsl:for-each select="Table[1]/*">
<th align="center" style="WHITE-SPACE:nowrap" bordercolor="#ffffff">
<xsl:value-of select="name()"/>
</th>
</xsl:for-each>
</tr>
</table>
<!--这段用来显示记录符合条件的记录-->
<xsl:template match="Table">
<xsl:variable name="Position" select="position()"/>
<tr style="FONT-SIZE:x-small; BACKGROUND-COLOR:#ffffff" >
<xsl:if test="position() mod 2 != 1">
<xsl:attribute name="style">BACKGROUND-COLOR:#f5f5f5;FONT-SIZE:x-small;</xsl:attribute>
</xsl:if>
<!--问题(2)在此小弟尝试了下,汗颜,不知如何判断了,我将查询出数据中不为空的全给加上了input,主要问题在此-->
<!--也就是说,为空数据无需考虑,判断第四列后的列数,里面加上input-->
<xsl:for-each select="*">
<xsl:choose>
<xsl:when test="text()[. != '']">
<td nowrap="true" class="TableTDCss">
<xsl:element name="input">
<xsl:attribute name="type">text</xsl:attribute>
<xsl:attribute name="style">width:50;border:0;background-color:transparent</xsl:attribute>
<xsl:attribute name="value">
<xsl:value-of select="text()"/>
</xsl:attribute>
</xsl:element>
</td>
</xsl:when>
<xsl:otherwise>
<td nowrap="true">
</td>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</tr>
</xsl:template>
本人刚接触xsl,万望指教。
[解决办法]
< 转成 < >转成 > 或者放到CDATA节点中就不需要转了
-------
直接 node()[text()] 试试看呢?