<%
Clase de caché Rem xml
'------------------------------------------------ - ------------------
'Conserve la información de derechos de autor al reimprimir
'Autor: ╰⑥月の雨╮
'Versión: ver1.0
'Esta clase se basa parcialmente en la clase de caché de datos walkmanxml, que es más conveniente de usar. Bienvenido a comunicarse y progresar.
'------------------------------------------------ - ------------------
Clase XmlCacheCls
Private m_DataConn 'Fuente de datos, debe estar abierta
Private m_CacheTime 'Tiempo de caché, en segundos, el valor predeterminado es 10 minutos
Ruta xml privada m_XmlFile ', use dirección absoluta, no se requiere extensión
Declaración SQL privada m_Sql '
Matriz de datos devuelta privada m_SQLArr '(solo lectura)
Private m_ReadOn '(Solo lectura) Devuelve
las propiedades del modo de lectura 1-base de datos 2-xml para detección ============================ ==============
'Fuente de datos
Conexión de conjunto de propiedad pública (v)
Establecer m_DataConn = v
Propiedad final
Propiedad pública Obtener Conn
Conexión = m_DataConn
Propiedad final
'Tiempo de caché
Propiedad pública Let CacheTime(v)
m_CacheTime=v
Propiedad final
Propiedad pública Obtener CacheTime
Tiempo de caché = m_Tiempo de caché
la propiedad final
, use dirección absoluta
Propiedad pública Let XmlFile(v)
m_XmlFile = v
Propiedad final
Propiedad pública GetXmlFile
ArchivoXml = m_ArchivoXml
Declaración SQL de
propiedad final
Propiedad pública Let Sql(v)
m_Sql=v
Propiedad final
Propiedad pública obtener SQL
SQL = m_SQL
Propiedad final
'Devolver matriz de registros
Propiedad pública Obtener SQLArr
SQLArr = m_SQLArr
Propiedad final
'Volver al modo lectura
Propiedad pública Obtener lectura
Leer en = m_ReadOn
Propiedad final
'Destrucción de clase===========================================
Sub privado Class_Initialize() 'Inicializar clase
m_CacheTime=60*10 'El tiempo de caché predeterminado es 10 minutos
End Sub
Private Sub Class_Terminate() 'Liberar clase
End Sub
'Método público de clase ================================== ========
Rem lee datos
Función pública Leer datos
Si FSOExistsFile(m_XmlFile) Entonces 'existe caché XML, lea directamente desde xml
Leer datos de XML
m_ReadOn=2
Demás
Leer datos de DB
m_ReadOn=1
Terminar si
La función final
Rem escribe datos XML
Función pública WriteDataToXml
Si FSOExistsFile(m_XmlFile) Entonces 'Salir directamente si xml no ha caducado
Si no esXmlCacheExpired(m_XmlFile,m_CacheTime) entonces salga de la función
Terminar si
atenuados
contenido dimxml
tenue k
contenido xml = ""
xmlcontent = xmlcontent & "<?xml version=""1.0"" codificación=""gb2312""?>" & vbnewline
xmlcontent = xmlcontent & " <raíz>" & vbnewline
k=0
Establecer Rs = Server.CreateObject ("Adodb.Recordset")
Rs.abrir m_sql,m_DataConn,1
Mientras no sea rs.eof
xmlcontent = xmlcontent & " <elemento "
Para cada campo en rs.Fields
xmlcontent = xmlcontent & campo.nombre & "=""" & XMLStringEnCode(campo.valor) & """ "
Próximo
rs.movenext
k=k+1
xmlcontent = xmlcontent & "></item>" & vbnewline
Encaminarse a
rs.cerrar
Configurar=Nada
xmlcontent = xmlcontent & " </root>" & vbnewline
Ruta de carpeta tenue
ruta de carpeta = Recortar(left(m_XmlFile,InstrRev(m_XmlFile,"")-1))
Llame a CreateDIR(ruta de carpeta&"") 'Crear carpeta
WriteStringToXMLFile m_XmlFile,xmlcontent
Función final
'Método privado de clase=============================================
Rem de datos de lectura de archivos XML
Función privada ReadDataFromXml
Dim SQLARR() 'Matriz
Dim XmlDoc 'objeto XmlDoc
Dim objNode 'nodo secundario
Dim ItemsLength 'La longitud del nodo secundario
Dim AttributesLength 'La longitud de los atributos del nodo secundario
Establecer XmlDoc=Server.CreateObject("Microsoft.XMLDOM")
XmlDoc.Async=Falso
XmlDoc.Load(m_XmlFile)
Establecer objNode=XmlDoc.documentElement 'Obtener el nodo raíz
ItemsLength=objNode.ChildNodes.length 'Obtiene la longitud de los nodos secundarios
Para items_i=0 A ItemLength-1
AttributesLength=objNode.childNodes(items_i).Attributes.length 'Obtiene la longitud de los atributos del nodo secundario
Para Atributos_i=0 A AtributosLongitud-1
ReDim Preservar SQLARR (AtributosLongitud-1, elementos_i)
SQLArr(Attributes_i,items_i) = objNode.childNodes(items_i).Attributes(Attributes_i).Nodevalue
Próximo
Próximo
Establecer XmlDoc = Nada
m_SQLArr = SQLARR
Función final
Rem lee datos de la base de datos
Función privada ReadDataFromDB
atenuados
DimSQLARR()
tenue k
k=0
Establecer Rs = Server.CreateObject ("Adodb.Recordset")
Rs.abrir m_sql,m_DataConn,1
Si no (rs.eof y rs.bof) entonces
Mientras no sea rs.eof
Longitud de campo tenue
longitud del campo = rs.Fields.count
ReDim Preservar SQLARR(fieldlegth,k)
Campo oscuro
Para campoi = 0 A campolegth-1
SQLArr(campoi,k) = rs.Fields(campoi).valor
Próximo
rs.movenext
k=k+1
Encaminarse a
Terminar si
rs.cerrar
Configurar=Nada
m_SQLArr = SQLArr
Función final
'Método privado auxiliar de la clase=========================================== ==
Rem Escribir archivo xml
Sub privado WriteStringToXMLFile (nombre de archivo, cadena)
fs,ts tenues
Establecer fs= createobject("scripting.filesystemobject")
Si no es IsObject(fs), entonces salga de Sub
Establecer ts=fs.OpenTextFile(nombre de archivo,2,Verdadero)
ts.writeline(cadena)
ts.cerrar
Establecer ts=Nada
Establecer fs=Nada
End Sub
Rem determina si el caché xml ha caducado
La función privada esXmlCacheExpired(archivo,segundos)
archivo oscuro la última vez
archivoúltimahora = FSOGetFileLastModifiedTime(archivo)
Si DateAdd("s",segundos,archivolasttime) < Ahora entonces
isXmlCacheExpired = Verdadero
Demás
isXmlCacheExpired = Falso
Terminar si
End Function
Rem obtiene la hora de la última modificación del archivo
Función privada FSOGetFileLastModifiedTime(archivo)
Tenue fso,f,s
Establecer fso=CreateObject("Scripting.FileSystemObject")
Establecer f=fso.GetFile(archivo)
FSOGetFileLastModifiedTime = f.DateLastModified
Establecer f = Nada
Establecer fso = Nada
el
archivo Rem de función final?
Función pública FSOExistsFile(archivo)
fso tenue
Establecer fso = Server.CreateObject("Scripting.FileSystemObject")
Si fso.FileExists (archivo) Entonces
FSOExistsFile = verdadero
Demás
FSOExistsFile = falso
Terminar si
Establecer fso = nada
Carácter de escape xml Rem
de función final
Función privada XMLStringEnCode(str)
Si str&"" = "" Entonces XMLStringEnCode="":Salir de la función
cadena = Reemplazar(cadena,"<","<")
cadena = Reemplazar(cadena,">",">")
str = Reemplazar(str,"'","'")
cadena = Reemplazar(cadena",""",""")
cadena = Reemplazar (cadena, "&", "&")
XMLStringEnCode = cadena
Función final
Rem Crear carpeta
Función privada CreateDIR (byval LocalPath)
En caso de error Continuar siguiente
Dim i,FileObject,patharr,path_level,pathtmp,cpath
RutaLocal = Reemplazar(RutaLocal,"","/")
Establecer FileObject = server.createobject ("Scripting.FileSystemObject")
rutaarr = Dividir(RutaLocal,"/")
nivel_ruta = UBound(rutarr)
Para i = 0 A nivel_ruta
Si i = 0 entonces
rutatmp=patharr(0) & "/"
Demás
rutatmp = rutatmp & rutarr(i) & "/"
Terminar si
rutac = izquierda(rutatmp,len(rutatmp)-1)
Si no es FileObject.FolderExists (cpath), entonces
'Respuesta.escribir cpath
Ruta de acceso FileObject.CreateFolder
Terminar si
Próximo
Establecer FileObject = Nada
Si número de error<>0 Entonces
CrearDIR = Falso
errar.Borrar
Demás
CrearDIR = Verdadero
Terminar si
Función final
Fin de clase
'Establecer caché
Función SetCache(xmlFilePath,CacheTime,Conn,Sql)
establecer caché = nuevo XmlCacheCls
Establecer caché.Conn=Conn
cache.XmlFile=xmlFilePath
caché.Sql=Sql
cache.CacheTime=Tiempo de caché
caché.WriteDataToXml
Establecer caché = Nada
Función final
'Leer caché
Función ReadCache(xmlFilePath,Conn,Sql,ByRef ReadOn)
establecer caché = nuevo XmlCacheCls
Establecer caché.Conn=conn
cache.XmlFile=xmlFilePath
caché.Sql=Sql
caché.ReadData
ReadCache = caché.SQLArr
ReadOn=caché.ReadOn
Función final
%>
Uso:
1 datos de caché a xml
código:
código de programa
<!--#include file="Conn.asp"-->
<!--#include file="Xml.asp"-->
<%
establecer caché = nuevo XmlCacheCls
Establecer caché.Conn=conn
cache.XmlFile=Server.Mappath("xmlcache/index/Top.xml")
cache.Sql="seleccione los 15 principales prod_id,prod_name,prod_uptime de tblProduction"
caché.WriteDataToXml
%>
2 Código para leer datos almacenados en caché
:
código de programa
<!--#include file="Conn.asp"-->
<!--#include file="Xml.asp"-->
<%
establecer caché = nuevo XmlCacheCls
Establecer caché.Conn=conn
cache.XmlFile=Server.Mappath("xmlcache/index/Top.xml")
cache.Sql="seleccione los 15 principales prod_id,prod_name,prod_uptime de tblOrden de producción por prod_id asc"
caché.ReadData
rsArray=caché.SQLArr
si esArray(rsArray) entonces
para i=0 a ubound(rsArray,2)
para j=0 a ubound(rsArray,1)
respuesta.Write(rsArray(j,i)&"<br><br>")
próximo
próximo
terminar si
%>
Tiempo de caché, la unidad predeterminada es 10 minutos en segundos. También puede configurar cache.CacheTime=60*30 30 minutos usted mismo;