首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

请问一XSL有关问题,查找半天无头绪,望指教

2012-02-16 
请教一XSL问题,查找半天无头绪,望指教。问题有二:(1)如何传递特殊字符?(如,,)我是转换成汉字给传递到xs

请教一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,万望指教。

[解决办法]
< 转成 &lt; >转成 &gt; 或者放到CDATA节点中就不需要转了
-------
直接 node()[text()] 试试看呢?

热点排行