精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>XML>>(3)XML开发技术>>使用ASP将数据库-->XML,再使用XSL显示结果(转)

主题:使用ASP将数据库-->XML,再使用XSL显示结果(转)
发信人: webpk(蒸的英雄)
整理人: leitiger(2001-06-27 14:41:12), 站内信件
本例可以输出一个XML文件结构的指定日期的图书销售排行榜,
根据XSL样式表可以进行本地重新排序。

booklist.asp如下:
<%@ Language=VBScript %>
<%set xmldoc=CreateObject("Microsoft.XMLDOM")%>    //建立DOM对象实例
<%Response.ContentType="text/xml"%>
<?xml version="1.0" encoding="gb2312"?>        //申明XML文件及字符集
<?xml:stylesheet type="text/xsl" href="booklist.xsl"?> //引用XSL样式表
<%
  inputdate=request.querystring("inputdate")
  if inputdate="" then
   inputdate="2000/05/14"
  end if                        //获得指定日期排行
 
  set root=xmldoc.createnode("element","排行榜","")  //建立root对象
  xmldoc.appendchild(root)
  root.setattribute "日期",inputdate          //设置日期属性

  set conn=server.CreateObject("adodb.connection")
  conn.open "filedsn=web.dsn"             //建立数据库连接

   rssql="select top 20 book_name,isbn_code,price,publisher,sum(num) as num from sales where convert(char(10),sale_date,111)='"&inputdate&"' group by book_name,isbn_code,price,publisher order by num desc"
   set myrs=server.createobject("adodb.recordset")
   myrs.open rssql,conn,3,3          //从数据库中取得前20名数据

   myrs.movefirst
   
   while not myrs.eof            //循环读取数据
    
     set book=xmldoc.createnode("element","图书","")  //建立对象
     root.appendchild(book)               //建立节点

     set bookname=xmldoc.createnode("element","书名","")
     book.appendchild(bookname)
     bookname.text=myrs("book_name")          //给书名赋值
    
     set isbncode=xmldoc.createnode("element","ISBN代码","")
     book.appendchild(isbncode)
     isbncode.text=myrs("isbn_code")
    
     set price=xmldoc.createnode("element","定价","")
     book.appendchild(price)
     price.text=myrs("price")
    
     set publisher=xmldoc.createnode("element","版别","")
     book.appendchild(publisher)
     publisher.text=myrs("publisher")
    
     set num=xmldoc.createnode("element","销售数量","")
     book.appendchild(num)
     num.text=myrs("num")
    
     myrs.movenext
   wend

  response.write xmldoc.xml        //输出到客户端的XML
%>

输出结果如下:
<?xml version="1.0" encoding="gb2312"?>
<?xml:stylesheet type="text/xsl" href="bookmain.xsl"?>
<排行榜 日期="2000/05/14">
<图书>
<书名>ABC</书名>
<ISBN代码></ISBN代码>
<定价>220</定价>
<版别></版别>
<销售数量>20</销售数量>
</图书>
<图书>
<书名>DEF</书名>
<ISBN代码></ISBN代码>
<定价>198</定价>
<版别></版别>
<销售数量>20</销售数量>
</图书>
……                  //省略……
<图书>
<书名>RA</书名>
<ISBN代码></ISBN代码>
<定价>110</定价>
<版别></版别>
<销售数量>6</销售数量>
</图书>                 //共20条记录
</排行榜>

使用的样式表boolist.xsl如下
<?xml version="1.0" encoding="GB2312"?>      //设定字符集
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> //申明XSL样式表
 <xsl:template match="/">             //引用根节点的样式
  <HTML>
   <HEAD>
     <TITLE>书店</TITLE>
     <STYLE>
      TD {font-size: 9pt}
      .hand {cursor:hand}
      BODY {font-size: 9pt}
     </STYLE>
     <SCRIPT>
      <xsl:comment>
        <![CDATA[
         var bArrow=true;
         function sort(field)       //排序功能
         {
          if (bArrow){
           sort2(field);
          }
          else
          {
           sort2("-"+field);
          }
          bArrow=!bArrow;
         }
        
         function sort2(field)
         { 
          sortField.value = field;
          listing.innerHTML = source.documentElement.transformNode(stylesheet);
         }
        ]]>
      </xsl:comment>
     </SCRIPT>
     <SCRIPT for="window" event="onload">
     <xsl:comment>
      <![CDATA[
       stylesheet = document.XSLDocument;
       source = document.XMLDocument;
       sortField = document.XSLDocument.selectSingleNode("//@order-by");
      ]]>
     </xsl:comment>
     </SCRIPT>

   </HEAD>
   <BODY>
   <P align="center">上海新华书店————书店</P>
     <TABLE WIDTH="94%" align="center">
      <TR>
       <TD>
        <DIV id="listing">
          <xsl:apply-templates select="排行榜" /> //应用整个XML文件
        </DIV>
       </TD>
      </TR>
     </TABLE>
   </BODY>
  </HTML>
  </xsl:template>
  <xsl:template match="排行榜">          //显示方式
   <TABLE border="1" cellPadding="1" cellSpacing="1" width="100%">
    <THEAD align="center" bgcolor="Moccasin">
     <TD>
      <DIV class="hand" onClick="sort('书名')">书名</DIV>
     </TD>
     <TD width="100">
      <DIV class="hand" onClick="sort('ISBN代号')">ISBN代号</DIV>
     </TD>
     <TD width="50">
      <DIV class="hand" onClick="sort('定价')">定价</DIV>
     </TD>
     <TD width="100">
      <DIV class="hand" onClick="sort('版别')">版别</DIV>
     </TD>
     <TD width="100">
      <DIV class="hand" onClick="sort('图书/销售数量')">销售数量</DIV>
     </TD>
    </THEAD>
    <xsl:for-each select="图书" order-by="图书/销售数量">
     <TR align="center" bgcolor="#e7f2e5">
      <TD width="300">
       <DIV>
        <xsl:value-of select="书名"/>
       </DIV>
      </TD>
      <TD>
       <DIV>
        <xsl:value-of select="ISBN代号"/>
       </DIV>
      </TD>
      <TD>
       <DIV>
        <xsl:value-of select="定价"/>
       </DIV>
      </TD>
      <TD>
       <DIV>
        <xsl:value-of select="版别"/>
       </DIV>
      </TD>
      <TD>
       <DIV>
        <xsl:value-of select="销售数量"/>
       </DIV>
      </TD>
     </TR>
    </xsl:for-each>
   </TABLE>
  </xsl:template>
</xsl:stylesheet>

[关闭][返回]