asp xml 缓存类
来源:asp之家 发布时间:2011-04-03 11:20:00
代码如下:
<%
Rem xml缓存类
'--------------------------------------------------------------------
'转载的时候请保留版权信息
'作者:╰⑥月の雨╮
'版本:ver1.0
'本类部分借鉴 walkmanxml数据缓存类,使用更为方便 欢迎各位交流进步
'--------------------------------------------------------------------
Class XmlCacheCls
Private m_DataConn '数据源,必须已经打开
Private m_CacheTime '缓存时间,单位秒 默认10分钟
Private m_XmlFile 'xml路径,用绝对地址,不需要加扩展名
Private m_Sql 'SQL语句
Private m_SQLArr '(只读)返回的数据数组
Private m_ReadOn '(只读)返回读取方式 1-数据库 2-xml 检测用
'类的属性=========================================
'数据源
Public Property Set Conn(v)
Set m_DataConn = v
End Property
Public Property Get Conn
Conn = m_DataConn
End Property
'缓存时间
Public Property Let CacheTime(v)
m_CacheTime = v
End Property
Public Property Get CacheTime
CacheTime = m_CacheTime
End Property
'xml路径,用绝对地址
Public Property Let XmlFile(v)
m_XmlFile = v
End Property
Public Property Get XmlFile
XmlFile = m_XmlFile
End Property
'Sql语句
Public Property Let Sql(v)
m_Sql = v
End Property
Public Property Get Sql
Sql = m_Sql
End Property
'返回记录数组
Public Property Get SQLArr
SQLArr = m_SQLArr
End Property
'返回读取方式
Public Property Get ReadOn
ReadOn = m_ReadOn
End Property
'类的析构=========================================
Private Sub Class_Initialize() '初始化类
m_CacheTime=60*10 '默认缓存时间为10分钟
End Sub
Private Sub Class_Terminate() '释放类
End Sub
'类的公共方法=========================================
Rem 读取数据
Public Function ReadData
If FSOExistsFile(m_XmlFile) Then '存在xml缓存,直接从xml中读取
ReadDataFromXml
m_ReadOn=2
Else
ReadDataFromDB
m_ReadOn=1
End If
End Function
Rem 写入XML数据
Public Function WriteDataToXml
If FSOExistsFile(m_XmlFile) Then '如果xml未过期则直接退出
If Not isXmlCacheExpired(m_XmlFile,m_CacheTime) Then Exit Function
End If
Dim rs
Dim xmlcontent
Dim k
xmlcontent = ""
xmlcontent = xmlcontent & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbnewline
xmlcontent = xmlcontent & " <root>" & vbnewline
k=0
Set Rs = Server.CreateObject("Adodb.Recordset")
Rs.open m_sql,m_DataConn,1
While Not rs.eof
xmlcontent = xmlcontent & " <item "
For Each field In rs.Fields
xmlcontent = xmlcontent & field.name & "=""" & XMLStringEnCode(field.value) & """ "
Next
rs.movenext
k=k+1
xmlcontent = xmlcontent & "></item>" & vbnewline
Wend
rs.close
Set rs = Nothing
xmlcontent = xmlcontent & " </root>" & vbnewline
Dim folderpath
folderpath = Trim(left(m_XmlFile,InstrRev(m_XmlFile,"\")-1))
Call CreateDIR(folderpath&"") '创建文件夹
WriteStringToXMLFile m_XmlFile,xmlcontent
End Function
'类的私有方法=========================================
Rem 从Xml文件读取数据
Private Function ReadDataFromXml
Dim SQLARR() '数组
Dim XmlDoc 'XmlDoc对象
Dim objNode '子节点
Dim ItemsLength '子节点的长度
Dim AttributesLength '子节点属性的长度
Set XmlDoc=Server.CreateObject("Microsoft.XMLDOM")
XmlDoc.Async=False
XmlDoc.Load(m_XmlFile)
Set objNode=XmlDoc.documentElement '获取根节点
ItemsLength=objNode.ChildNodes.length '获取子节点的长度
For items_i=0 To ItemsLength-1
AttributesLength=objNode.childNodes(items_i).Attributes.length '获取子节点属性的长度
For Attributes_i=0 To AttributesLength-1
ReDim Preserve SQLARR(AttributesLength-1,items_i)
SQLArr(Attributes_i,items_i) = objNode.childNodes(items_i).Attributes(Attributes_i).Nodevalue
Next
Next
Set XmlDoc = Nothing
m_SQLArr = SQLARR
End Function
Rem 从数据库读取数据
Private Function ReadDataFromDB
Dim rs
Dim SQLARR()
Dim k
k=0
Set Rs = Server.CreateObject("Adodb.Recordset")
Rs.open m_sql,m_DataConn,1
If Not (rs.eof and rs.bof) Then
While Not rs.eof
Dim fieldlegth
fieldlegth = rs.Fields.count
ReDim Preserve SQLARR(fieldlegth,k)
Dim fieldi
For fieldi = 0 To fieldlegth-1
SQLArr(fieldi,k) = rs.Fields(fieldi).value
Next
rs.movenext
k=k+1
Wend
End If
rs.close
Set rs = Nothing
m_SQLArr = SQLArr
End Function
'类的辅助私有方法=========================================
Rem 写xml文件
Private Sub WriteStringToXMLFile(filename,str)
Dim fs,ts
Set fs= createobject("scripting.filesystemobject")
If Not IsObject(fs) Then Exit Sub
Set ts=fs.OpenTextFile(filename,2,True)
ts.writeline(str)
ts.close
Set ts=Nothing
Set fs=Nothing
End Sub
Rem 判断xml缓存是否到期
Private Function isXmlCacheExpired(file,seconds)
Dim filelasttime
filelasttime = FSOGetFileLastModifiedTime(file)
If DateAdd("s",seconds,filelasttime) < Now Then
isXmlCacheExpired = True
Else
isXmlCacheExpired = False
End If
End Function
Rem 得到文件的最后修改时间
Private Function FSOGetFileLastModifiedTime(file)
Dim fso,f,s
Set fso=CreateObject("Scripting.FileSystemObject")
Set f=fso.GetFile(file)
FSOGetFileLastModifiedTime = f.DateLastModified
Set f = Nothing
Set fso = Nothing
End Function
Rem 文件是否存在
Public Function FSOExistsFile(file)
Dim fso
Set fso = Server.CreateObject("Scripting.FileSystemObject")
If fso.FileExists(file) Then
FSOExistsFile = true
Else
FSOExistsFile = false
End If
Set fso = nothing
End Function
Rem xml转义字符
Private Function XMLStringEnCode(str)
If str&"" = "" Then XMLStringEnCode="":Exit Function
str = Replace(str,"<","<")
str = Replace(str,">",">")
str = Replace(str,"'","'")
str = Replace(str,"""",""")
str = Replace(str,"&","&")
XMLStringEnCode = str
End Function
Rem 创建文件夹
Private function CreateDIR(byval LocalPath)
On Error Resume Next
Dim i,FileObject,patharr,path_level,pathtmp,cpath
LocalPath = Replace(LocalPath,"\","/")
Set FileObject = server.createobject("Scripting.FileSystemObject")
patharr = Split(LocalPath,"/")
path_level = UBound (patharr)
For i = 0 To path_level
If i=0 Then
pathtmp=patharr(0) & "/"
Else
pathtmp = pathtmp & patharr(i) & "/"
End If
cpath = left(pathtmp,len(pathtmp)-1)
If Not FileObject.FolderExists(cpath) Then
'Response.write cpath
FileObject.CreateFolder cpath
End If
Next
Set FileObject = Nothing
If err.number<>0 Then
CreateDIR = False
err.Clear
Else
CreateDIR = True
End If
End Function
End Class
'设置缓存
Function SetCache(xmlFilePath,CacheTime,Conn,Sql)
set cache=new XmlCacheCls
Set cache.Conn=Conn
cache.XmlFile=xmlFilePath
cache.Sql=Sql
cache.CacheTime=CacheTime
cache.WriteDataToXml
Set cache = Nothing
End Function
'读取缓存
Function ReadCache(xmlFilePath,Conn,Sql,ByRef ReadOn)
set cache=new XmlCacheCls
Set cache.Conn=conn
cache.XmlFile=xmlFilePath
cache.Sql=Sql
cache.ReadData
ReadCache=cache.SQLArr
ReadOn=cache.ReadOn
End Function
%>
使用方法:
1 缓存数据到xml
代码:
代码如下:
<!--#include file="Conn.asp"-->
<!--#include file="Xml.asp"-->
<%
set cache=new XmlCacheCls
Set cache.Conn=conn
cache.XmlFile=Server.Mappath("xmlcache/index/Top.xml")
cache.Sql="select top 15 prod_id,prod_name,prod_uptime from tblProduction"
cache.WriteDataToXml
%>
2 读取缓存数据
代码:
代码如下:
<!--#include file="Conn.asp"-->
<!--#include file="Xml.asp"-->
<%
set cache=new XmlCacheCls
Set cache.Conn=conn
cache.XmlFile=Server.Mappath("xmlcache/index/Top.xml")
cache.Sql="select top 15 prod_id,prod_name,prod_uptime from tblProduction order by prod_id asc"
cache.ReadData
rsArray=cache.SQLArr
if isArray(rsArray) then
for i=0 to ubound(rsArray,2)
for j=0 to ubound(rsArray,1)
response.Write(rsArray(j,i)&"<br><br>")
next
next
end if
%>
缓存时间,单位秒 默认10分钟;也可以自己设定 cache.CacheTime=60*30 30分钟
猜你喜欢
- 第一步,修改配置文件:vim /etc/mysql/my.cnf找到bind-address = 127.0.0.1改为:bind-addr
- 批量替换的具体语法是: UPDATE 表名 SET 指定字段 = replace(指定字段, '要替换的字符串', '
- 前言本人是位大二在读在校学生,专业为地理信息科学,因跟老师一起做项目,所以有幸接触nc数据转换为tif数据,因为在这件事情上也遇过不少坑,也
- #!c:\python27\python.exe# -*- coding: utf-8 -*-import osimport refrom
- 目录prometheus通过exporter监控mysql,并用grafana图表展示1、测试机器 2、配置mysql host0
- 学习笔记,写到哪是哪。接着上一篇对纯文本文件读写操作,主要去实现一些文件夹操作。创建文件夹创建文件夹的时候往往要先判断文件夹是否存在。样例代
- 1. glob文件名模式匹配尽管glob API很小,但这个模块的功能却很强大。只要程序需要查找文件系统中名字与某个模式匹配的一组文件,就可
- 现有表格中的一行的代码如下所示: 效果可以看下具体51搜索展示http://www.51bt.cc,结合Xunsearch全文检索技术,可以
- 在对float零值判断时往往只需要和0做==即可,所以曾经int和float都用==0来做对比,比如下方: in
- 1.自动转到命名记 <script laguage="javascript"> window.locatio
- 实现效果图如下:当我点击 + 按钮时,会添加一行输入框组;当点击 - 按钮时,会删除这一行输入框组html代码如下:<div clas
- Python 的 httpx 包是一个复杂的 Web 客户端。当你安装它后,你就可以用它来从网站上获取数据。像往常一样,
- 使用工具:pexpect库pexpect可以理解为Linux下expect(不知道的可以百度下linux expect)的python封装。
- 1比如python提倡简单实用的思想,它就没有switch语句,如果要实现switch语句的效果 的话可以通过2个方法来写把 (1)通过if
- 一、思路1、通过window的aip函数CreateFile()函数获得文件句柄2、检测在获得句柄的时候是否报错“文件被占用无法打开”3、如
- 简介时间序列数据表示一系列特定时间内的数据间隔.如果我们想在机器学习中构建序列预测,那么我们必须处理顺序数据和时间.系列数据是顺序数据的摘要
- 一、设计目的1、教学目的本课程设计是学生学习完《Python程序设计》课程后,进行的一次全面的综合训练,通过课程设计,更好地掌握使用Pyth
- Mysql的分页的两个参数select * from user limit 1,21表示从第几条数据开始查(默认索引是0,如果写1,从第二条
- 使用递归查找父元素,知道查到想要的元素,然后return getParentTag(startTag) { var self
- Python os.remove() 方法os.remove() 方法用于删除指定路径的文件。如果指定的路径是一个目录,将抛出OSError