ASP.NET 动态查找数据 并且生成xml文档 同时使用xslt转换为xhtml

前言
xsl是一门标签解析语言,很适合做动态网页的前台标签
www.bamn.cn
1 首先是aspx页面


添加一个输入框 按钮 还有一个用来显示解析后的xhtml代码的控件
    <form id="form1" runat="server"> <div> <asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine" Height="127px" Width="317px"></asp:TextBox> <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> <asp:Literal ID="htmlShow" Text="" runat="server" /> </div> </form>

然后后台cs页面
在事件里面 我们首先获取数据源

        protected void Button1_Click(object sender, EventArgs e)
        {
            string sql = this.TextBox1.Text; string xml = new Scan.BLL.Log().GetXml(sql); this.htmlShow.Text = TranfeHtml(xml); }

其中这个GetXml方法

public static string ExecuteSqlForXml(string SQLString)
        {
            using (SqlConnection connection = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand(SQLString, connection); try { connection.Open(); object obj = cmd.ExecuteScalar(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return null; } else { return obj.ToString(); } } catch (System.Data.SqlClient.SqlException e) { throw e; } finally { cmd.Dispose(); connection.Close(); } } }

它主要就是执行sql语句 返回来xml文档

然后就是转换为html的方法了

 
 
 public string TranfeHtml(string xml)
        {
            xml = "<root>" + xml + "</root>"; XPathDocument xStyledoc = ConvertStringToXml(xml); XPathNavigator xStyleNav = xStyledoc.CreateNavigator(); //创建一个XmlTextReader对象,并加载cdcatalog.xsl文件 XmlTextReader xstyleread = new XmlTextReader(Context.Server.MapPath("cdcatalog.xsl")); //创建XslCompiledTransform对象,用于编译模板 xsl XslCompiledTransform xTan = new XslCompiledTransform(); //读取模板并进行编译  xTan.Load(xstyleread); //关闭xstyleread对象  xstyleread.Close(); //创建字符流对象sw StringWriter sw = new StringWriter(); //通过xsl把xml转化为xhtml,然后放到SW中 xTan.Transform(xStyleNav, null, sw); Context.Response.BufferOutput = true; //输出xhtml //关闭SW对象  sw.Close(); return sw.ToString(); } private XPathDocument ConvertStringToXml(string str) { XPathDocument xPath; StringReader txtReader; txtReader = new StringReader(str); xPath = new XPathDocument(txtReader); return xPath; }

这两个方法,注意就是xml文档在外面加入一个root标签
然后再看我们的xsl文档

 

 

<?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' version='1.0' encoding='UTF-8' indent='yes'/> <xsl:template match="/"> <html> <body> <h2>班级信息</h2> <table border="1"> <tr bgcolor="#9acd32"> <th align="left">班级名称</th> <th align="left">班级编号</th> </tr> <xsl:for-each select="/root/row"> <tr> <td> <xsl:value-of select="班级名"/> </td> <td> <xsl:value-of select="班级编号"/> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

 注意这里的树层次关系 顶端是root 然后每一行就是row 里面有很多的列 每一列几甩 value-of来显示

3然后我们再看解析出来的sql

 

 

 

 

<row>
  <班级编号>20050101  </班级编号>
  <班级名>计算机科学与技术1班</班级名>
  <班级人数>18</班级人数>
  <所属系别>200501    </所属系别>
  <辅导员>03        </辅导员>
</row>
<row>
  <班级编号>20050102  </班级编号>
  <班级名>计算机科学与技术2班</班级名>
  <班级人数>19</班级人数>
  <所属系别>200501    </所属系别>
  <辅导员>03        </辅导员>
</row>
<row>
  <班级编号>20050201  </班级编号>
  <班级名>英语系1班     </班级名>
  <班级人数>21</班级人数>
  <所属系别>200502    </所属系别>
  <辅导员>04        </辅导员>
</row>
<row>
  <班级编号>20050202  </班级编号>
  <班级名>英语系2班     </班级名>
  <班级人数>20</班级人数>
  <所属系别>200502    </所属系别>
  <辅导员>06        </辅导员>
</row>
<row>
  <班级编号>20050301  </班级编号>
  <班级名>企业管理系1班   </班级名>
  <班级人数>19</班级人数>
  <所属系别>200503    </所属系别>
  <辅导员>05        </辅导员>
</row>
<row>
  <班级编号>20050401  </班级编号>
  <班级名>国际贸易系1班   </班级名>
  <班级人数>18</班级人数>
  <所属系别>200504    </所属系别>
  <辅导员>09        </辅导员>
</row>
<row>
  <班级编号>20050402  </班级编号>
  <班级名>国际贸易系2班   </班级名>
  <班级人数>20</班级人数>
  <所属系别>200504    </所属系别>
  <辅导员>01        </辅导员>
</row>
<row>
  <班级编号>20050501  </班级编号>
  <班级名>艺术系1班     </班级名>
  <班级人数>26</班级人数>
  <所属系别>200505    </所属系别>
  <辅导员>08        </辅导员>
</row>
<row>
  <班级编号>20050502  </班级编号>
  <班级名>艺术系2班     </班级名>
  <班级人数>21</班级人数>
  <所属系别>200505    </所属系别>
  <辅导员>07        </辅导员>
</row>

 

其实就是一张表来的

 

 执行的sql语句

SELECT [班级编号]
      ,[班级名]
      ,[班级人数]
      ,[所属系别]
      ,[辅导员]
  FROM [班级信息] FOR XML PATH

关键是后面的 FOR XML PATH

这里面前面的sql语句 可以灵活的组合,可以表关联啊 数据库啊 等等

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值