前言
xsl是一门标签解析语言,很适合做动态网页的前台标签
![](https://i-blog.csdnimg.cn/blog_migrate/019534ccb502bb7ddf3ddd85add66828.jpeg)
添加一个输入框 按钮 还有一个用来显示解析后的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文档
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标签
<?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来显示
<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语句 可以灵活的组合,可以表关联啊 数据库啊 等等