发信人: 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>
|
|