• 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语句 可以灵活的组合,可以表关联啊 数据库啊 等等

  • 相关阅读:
    通过JavaScript垃圾回收机制来理解WeakSet/WeakMap中对象的弱引用
    json处理
    dotenv 加载本地环境变量
    各种ast库
    类型检测库
    npm 加解密库
    用计算机语言的爱情表白
    情侣在招聘会上搂抱招致企业反感
    《软件性能测试与LoadRunner实战》网上订购问题
    F1赛车的起源
  • 原文地址:https://www.cnblogs.com/maijin/p/4572728.html
Copyright © 2020-2023  润新知