码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2015-06-12 23:42:20      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

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

 

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

标签:

原文地址:http://www.cnblogs.com/maijin/p/4572728.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!