• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    asp xml 缓存类
    复制代码 代码如下:

    %
    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,"","lt;")
    str = Replace(str,">","gt;")
    str = Replace(str,"'","apos;")
    str = Replace(str,"""","quot;")
    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分钟
    上一篇:asp 存储过程分页代码第1/2页
    下一篇:asp 过滤尖括号内所有内容的正则代码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    asp xml 缓存类 asp,xml,缓存,类,asp,xml,缓存,