<%
Clase de caché REM XML
Clase XMLCACHECLS
Se debe abrir la fuente de datos privada m_dataconn '
Privado m_cachetime 'en caché, predeterminado a 10 minutos en segundos
Ruta privada m_xmlfile 'xml, use una dirección absoluta, no se requiere ninguna extensión
Declaración SQL de M_SQL privado
Matriz de datos de retorno m_sqlarr '(solo de lectura)
Privado m_readon '(solo lectura) Devuelve el método de lectura 1-database 2-xml para la detección
'Atributos de clase ================================================= ===
'Fuente de datos
Conjunto de propiedades públicas Conn (v)
Establecer m_dataconn = v
Propiedad final
Propiedad pública Get Conn
Conn = m_dataconn
Propiedad final
'Tiempo de caché
Propiedad pública Deje en Cachetime (V)
m_cachetime = v
Propiedad final
Propiedad pública Obtener tiempo en caché
Cachetime = M_Cachetime
Propiedad final
'ruta XML, con dirección absoluta
Propiedad pública Deja XMLFile (V)
m_xmlfile = v
Propiedad final
Propiedad pública Obtener xmlfile
Xmlfile = m_xmlfile
Propiedad final
Declaración de SQL
Propiedad pública Deja SQL (V)
m_sql = V
Propiedad final
Propiedad pública Obtenga SQL
Sql = m_sql
Propiedad final
'Volver a la matriz de registros
Propiedad pública Obtenga SQLarr
Sqlarr = m_sqlarr
Propiedad final
'Regreso al método de lectura
Propiedad pública Obtenga Readon
Readon = m_readon
Propiedad final
'Destrucción de clase ================================================== =========
Sub class_initialize () 'privado' Inicializar clase
m_cachetime = 60*10 'El tiempo de caché predeterminado es 10 minutos
Final
Clase de liberación privada sub class_terminate () '
Final
'Método público de clase =============================================== ==============
REM Leer datos
Lectura de función pública
Si fsoExistsFile (m_xmlfile) entonces 'hay un caché XML, lea directamente desde el XML
ReadDataFromXml
m_readon = 2
Demás
ReadDataFromDB
m_readon = 1
Final si
Función final
REM Escribir datos XML
Función pública WriteTatoxml
Si FsoExistsFile (m_xmlfile) entonces 'Si XML no ha expirado, salga directamente
Si no es iSxmlCacheExPired (m_xmlfile, m_cachetime) y luego salga de la función
Final si
Dim RS
Dim XMLContent
Atenuante
xmlContent =
xmlContent = xmlContent & <? xml versión = 1.0 encoding = gb2312?> & vbnewline
xmlContent = xmlContent & <Root> & vbnewline
K = 0
Establecer rs = server.createObject (ADODB.RecordSet)
Rs.open m_sql, m_dataconn, 1
Mientras que no rs.eof
xmlContent = xmlContent & <item
Para cada campo en Rs. Fields
xmlContent = xmlContent & Field.name & = & xmlStringEnDode (field.value) &
Próximo
Rs.Movenext
K = K+1
xmlContent = xmlContent &> </item> & vbnewline
Encaminarse a
rs.
Establecer RS = nada
xmlContent = xmlContent & </root> & vbnewline
Papatio de carpeta dim
FolderPath = Trim (izquierda (m_xmlfile, instrrev (m_xmlfile,/)-1))
Llamar a la carpeta creationir (folderPath &) 'Crear
WriteStringToxmlFile M_XMLFILE, XMLCONTENT
Función final
'Método privado de clase =============================================== ===========
REM Lea los datos del archivo XML
Función privada readDataFromxml
Dim sqlarr () 'matriz
Objeto dim xmldoc 'xmldoc
Dim objnode 'nodo infantil
Dim elementos longitud 'longitud de los nodos infantiles
Dim Attributes Length 'Longitud del atributo de nodo infantil
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 'Obtenga la longitud del nodo infantil
Para elementos_i = 0 a elementos longitud-1
AtributesLength = objnode.childnodes (items_i) .Attributes.length 'Obtenga la longitud del atributo del nodo infantil
Para atributos_i = 0 a AttributesLength-1
Redim Preserve SQLarr (AttributesLength-1, items_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 Lea los datos de la base de datos
Función privada readDataFromDB
Dim RS
Dim SqLarr ()
Atenuante
K = 0
Establecer rs = server.createObject (ADODB.RecordSet)
Rs.open m_sql, m_dataconn, 1
Si no (rs.eof y rs.bof) entonces
Mientras que no rs.eof
Dim Fieldlegth
Fieldlegth = Rs.fields.Count
Redim Preserve SQLarr (Fieldlegth, K)
Dim Fieldi
Para FieldDi = 0 a Fieldlegth-1
Sqlarr (fieldi, k) = rs.fields (fieldi) .value
Próximo
Rs.Movenext
K = K+1
Encaminarse a
Final si
rs.
Establecer RS = nada
m_sqlarr = sqlarr
Función final
'Método privado auxiliar de clase ============================================== =========
REM escribe archivo XML
Sub WriteStringToxmlFile privado (nombre de archivo, STR)
Dim FS, TS
Establecer fs = createObject (scripting.filesystemObject)
Si no es ISObject (FS), salga SUB
Establecer ts = fs.opeNextFile (nombre de archivo, 2, verdadero)
Ts.WriteLine (STR)
tshlose
Establecer ts = nada
Establecer fs = nada
Final
REM determina si expira el caché XML
Función privada isxmlCacheExPired (archivo, segundos)
Dim Filelasttime
filelasttime = fsogetFilelastModifiedTime (archivo)
Si dataadd (s, segundos, filelasttime) <ahora luego
isxmlCacheExPired = True
Demás
isxmlCacheExpired = false
Final si
Función final
REM Obtenga el último tiempo de modificación del archivo
Función privada fsogetFilelastModifiedTime (archivo)
Dim FSO, F, S
Establecer fso = createObject (scripting.filesystemObject)
Establecer F = fso.getfile (archivo)
FSogetFilelastModifiedTime = F.DatelastModified
Establecer f = nada
Establecer FSO = nada
Función final
¿Existe el archivo REM?
Función pública fsoExistsFile (archivo)
Dim FSO
Establecer fso = server.createObject (scripting.filesystemObject)
Si fso.fileExists (archivo) entonces
FsoExistsfile = True
Demás
FsoExistsfile = falso
Final si
Establecer FSO = nada
Función final
REM XML Escape personajes
Función privada xmlStringEndode (STR)
If str & = entonces xmlStringEnDode =: Función de salida
str = reemplazar (str, <, <)
str = reemplazar (str,>,>)
str = reemplazar (str, ', & apos;)
str = reemplazar (str ,,)
str = reemplazar (str, &, y)
XmlStringencode = str
Función final
REM Crear carpeta
Función privada creada (Byval localpath)
En el currículum de error siguiente
Dim I, FileObject, Patharr, Path_Level, Pathtmp, CPath
Localpath = reemplazar (localpath,/,/)
Establecer fileObject = server.CreateObject (scripting.filesystemObject)
Patharr = Split (LocalPath,/)
Path_level = Ubound (Patharr)
Para i = 0 a path_level
Si yo = 0 entonces
pathtmp = patharr (0) & /
Demás
pathtmp = pathtmp y patharr (i) & /
Final si
cpath = izquierda (pathtmp, len (pathtmp) -1)
Si no es fileObject.FoldeExists (CPATH) entonces
'Respuesta. Escribe cpath
FileObject.CreateFolder CPATH
Final si
Próximo
Establecer fileObject = nada
Si err.number <> 0 entonces
Creationir = falso
Err.Clear
Demás
Creationir = true
Final si
Función final
Clase final
'Establecer caché
Función SetCache (XMLFilePath, Cachetime, Conn, SQL)
Establecer caché = nuevo xmlcachecls
Establecer cache.conn = Conn
cache.xmlfile = xmlfilepath
caché.sql = sql
Cache.cachetime = Cachetime
caché.WriteTaTaxml
Establecer caché = nada
Función final
'Leer caché
Función ReadCache (XMLFilePath, Conn, SQL, Byref Readon)
Establecer caché = nuevo xmlcachecls
Establecer cache.conn = Conn
cache.xmlfile = xmlfilepath
caché.sql = sql
Cache.readdata
ReadCache = cache.sqlarr
Readon = Cache.Readon
Función final
%>
Cómo usar:
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 cache.conn = Conn
cache.xmlfile = server.mappath (xmlcache/index/top.xml)
Cache.sql = Seleccione Top 15 Prod_id, prod_name, prod_uptime de tblproduction
caché.WriteTaTaxml
%>
2 Leer datos en caché
Código:
Código de programa
<!-#include file = conn.asp->
<!-#include file = xml.asp->
<%
Establecer caché = nuevo xmlcachecls
Establecer cache.conn = Conn
cache.xmlfile = server.mappath (xmlcache/index/top.xml)
cache.sql = seleccione Top 15 Prod_id, Prod_name, Prod_upTime de TBLProduction Order de Prod_id ASC
Cache.readdata
rsArray = cache.sqlarr
Si isarray (rsarray) entonces
para i = 0 a Ubund (rsArray, 2)
para j = 0 a Ubund (rsArray, 1)
Response.Write (rsArray (J, I) y <br> <br>)
próximo
próximo
final si
%>
El tiempo de caché es de 10 minutos por defecto en segundos;