<%
Classe de cache Rem XML
Classe XMLCACHECLS
Private M_DATACONN 'A fonte de dados deve ser aberta
Cachetime privado de M_CacheTime, padrão para 10 minutos em segundos
Caminho XML privado m_xmlfile ', use endereço absoluto, nenhuma extensão é necessária
Declaração privada m_sql 'sql
Private M_SQLARR '(somente leitura) Retorno Array de Dados
Private m_readon '(somente leitura) Retorna o método de leitura 1-Database 2-xml para detecção
'Atributos da classe ================================================ ===
'Fonte de dados
Conjunto de propriedades públicas Conn (V)
Defina m_dataconn = v
Propriedade final
Propriedade pública Get Conn
Conn = m_dataconn
Propriedade final
'Hora do cache
Propriedade pública Deixe Cachetime (V)
m_cacheTime = v
Propriedade final
Propriedade pública Obtenha Cachetime
Cachetime = m_cacheTime
Propriedade final
'Caminho XML, com endereço absoluto
Propriedade pública Let XMLFile (V)
m_xmlfile = v
Propriedade final
Propriedade pública Get XMLFile
Xmlfile = m_xmlfile
Propriedade final
Declaração SQL
Propriedade pública Let SQL (V)
m_sql = v
Propriedade final
Propriedade pública Obtenha SQL
Sql = m_sql
Propriedade final
'Retorne à matriz de registros
Propriedade pública Get SQLARR
SQLARR = M_SQLARR
Propriedade final
'Retorne ao método de leitura
Propriedade pública Get Readon
Readon = m_readon
Propriedade final
'Destruição da classe ================================================ =========
Private subclass_initialize () 'Inicialize Classe
m_cacheTime = 60*10 'O tempo de cache padrão é de 10 minutos
Final sub
Classe de Liberação Sub -Class_terminate () Private ()
Final sub
'Método público de classe =============================================== ==============
Rem Leia dados
Função pública ReadData
Se fsoexistsfile (m_xmlfile), então 'existe um cache xml, leia diretamente do XML
ReadDataFromxml
m_readon = 2
Outro
ReadDataFromDB
m_readon = 1
Final se
Função final
Rem Write XML Data
Função pública WritedATATOXML
Se fsoexistsFile (m_xmlfile), então 'se o XML não expirar, saia diretamente
Se não for isxmlcacheexpirado (m_xmlfile, m_cachetime) e depois a função de saída
Final se
Dim Rs
Dim XMLContent
Dim k
xmlContent =
xmlContent = xmlContent & <? xml versão = 1.0 coding = gb2312?> & vbNewline
xmlContent = xmlContent & <sic> & vbNewline
k = 0
Set rs = server.createObject (adodb.recordset)
Rs.open m_sql, m_dataconn, 1
Embora não seja Rs.eof
xmlContent = xmlContent & <item
Para cada campo em Rs.Fields
xmlContent = xmlContent & field.name & = & xmlstringEncode (field.value) &
Próximo
rs.movenext
k = k+1
xmlContent = xmlContent &> </tem> & vBNewline
Wend
rs.close
Definir rs = nada
xmlContent = xmlContent & </sic> & vBNewline
Dim PasderPath
FolderPath = Trim (esquerda (m_xmlfile, Instrrev (m_xmlfile,/)-1)))
Call CreateDir (pastaPath &) 'Criar pasta
WritEstringToxmlfile m_xmlfile, xmlContent
Função final
'Método privado de classe =============================================== ===========
Rem Leia dados do arquivo XML
Função privada ReadDataFromxml
Dim SQLARR () 'Array
Objeto xmldoc do XMLDOC '
Nó Infantil Dim ObjNode '
Dim itens Length 'Comprimento dos nós filhos
Dim AttributesLength 'Comprimento do atributo do nó filho
Definir xmldoc = server.createObject (Microsoft.xmldom)
Xmldoc.async = false
Xmldoc.load (m_xmlfile)
Definir objNode = xmldoc.documentElement 'Obtenha o nó raiz
ItensLength = objNode.childnodes.length 'Obtenha o comprimento do nó da criança
Para itens_i = 0 a itens Length-1
AttritutesLength = objNode.ChildNodes (itens_i) .attributes.length 'Obtenha o comprimento do atributo do nó infantil
Para atributos_i = 0 para atributesLength-1
Redim Preserve SQLARR (AtributesLength-1, itens_i)
Sqlarr (atributes_i, itens_i) = objNode.childnodes (itens_i) .attributes (atributes_i) .NodEvalue
Próximo
Próximo
Definir xmldoc = nada
M_SQLARR = SQLARR
Função final
Rem leia dados do banco de dados
Função privada ReadDataFromDB
Dim Rs
Dim SQLARR ()
Dim k
k = 0
Set rs = server.createObject (adodb.recordset)
Rs.open m_sql, m_dataconn, 1
Se não (Rs.eof e Rs.BOF), então
Embora não seja Rs.eof
Dim Fieldlegth
fieldlegth = rs.fields.count
Redim Preserve SQLARR (Fieldlegth, K)
Dim Fieldi
Para FieldDi = 0 para Fieldlegth-1
Sqlarr (fieldi, k) = rs.fields (fieldi) .Value
Próximo
rs.movenext
k = k+1
Wend
Final se
rs.close
Definir rs = nada
M_SQLARR = SQLARR
Função final
'Método privado auxiliar de classe ================================================ =========
Rem escreve o arquivo XML
Sub -WritEstringToxmlfile privado (nome do arquivo, STR)
Dim fs, ts
Set fs = createObject (script.filesystemoBject)
Se não o isobject (fs), então saia submarino
Set ts = fs.pentExtfile (nome do arquivo, 2, true)
TS.WriteLine (STR)
ts.close
Defina ts = nada
Defina FS = nada
Final sub
REM determina se o cache XML expira
Função privada isxmlcacheexpired (arquivo, segundos)
Dim FileLastTime
FileLastTime = FSOGETFILELASTModifiedTime (arquivo)
Se DataAdd (s, segundos, filelasttime) <agora então
isxmlcacheexPired = true
Outro
isxmlcacheexPired = false
Final se
Função final
REM Obtenha o último tempo de modificação do arquivo
Função privada FSOGETFILELASTModifiedTime (arquivo)
Dim fso, f, s
Set fso = createObject (script.filesystemObject)
Set f = fso.getFile (arquivo)
FsoGetFileLastModifiedTime = F.DATELASTModificado
Definir F = nada
Definir FSO = nada
Função final
O arquivo REM existe?
Função pública fsoexistsfile (arquivo)
Dim FSO
Set fso = server.createObject (script.filesystemoBject)
Se fso.FileExists (arquivo) então
Fsoexistsfile = true
Outro
Fsoexistsfile = false
Final se
Definir FSO = nada
Função final
Rem XML Escape Personagens
Função privada xmlstringEncode (STR)
Se str & = então xmlstringEncode =: Função de saída
str = substituir (str, <, <)
str = substituir (str,>,>)
str = substituir (str, ', & apo;)
str = substituir (str ,,)
str = substituir (str, & &)
XmlStringEncode = str
Função final
Rem Criar pasta
Função privada criada (BYVAL LOCALPATH)
Em erro de erro em seguida
Dim I, FileObject, PATHARR, PATH_LEVEL, PATHTMP, CPATH
LocalPath = Substitua (LocalPath,/,/)
Set fileObject = server.createObject (script.filesystemoBject)
PATHARR = SPLIT (LocalPath,/)
path_level = ubound (patharr)
Para i = 0 para path_level
Se eu = 0 então
pathtmp = patharr (0) & /
Outro
pathtmp = pathtmp e patharr (i) & /
Final se
cpath = esquerda (pathtmp, len (pathtmp) -1)
Se não for FileObject.Polderexists (CPath), então
'Response.Write CPath
FileObject.CreateFolder CPath
Final se
Próximo
Set fileObject = nada
Se err.number <> 0 então
CreateDir = false
err.clear
Outro
CreativeIr = true
Final se
Função final
Classe final
'Defina o cache
Função setcache (xmlfilepath, cachetime, conn, sql)
Definir cache = novo xmlcachecls
Definir cache.conn = Conn
cache.xmlfile = xmlfilepath
cache.sql = sql
cache.cacheTime = Cachetime
Cache.WriteDATATOXML
Definir cache = nada
Função final
'Leia o cache
Função Readcache (XMLFilePath, Conn, SQL, Byref Readon)
Definir cache = novo xmlcachecls
Definir cache.conn = Conn
cache.xmlfile = xmlfilepath
cache.sql = sql
cache.readData
Readcache = cache.SQLARR
Readon = cache.readon
Função final
%>
Como usar:
1 Dados de cache para XML
Código:
Código do programa
<!-#inclua arquivo = Conn.asp->
<!-#inclua arquivo = xml.asp->
<%
Definir cache = novo xmlcachecls
Definir cache.conn = Conn
cache.xmlfile = server.mappath (xmlcache/index/top.xml)
cache.sql = selecione Top 15 Prod_id, Prod_Name, Prod_uptime da TblProduction
Cache.WriteDATATOXML
%>
2 Leia dados em cache
Código:
Código do programa
<!-#inclua arquivo = Conn.asp->
<!-#inclua arquivo = xml.asp->
<%
Definir cache = novo xmlcachecls
Definir cache.conn = Conn
cache.xmlfile = server.mappath (xmlcache/index/top.xml)
cache.sql = Selecione os 15 melhores produtos prod_id, Prod_name, Prod_uptime da Ordem TBLPRoduction por Prod_id ASC
cache.readData
rSarray = cache.SQLARR
Se Isarray (RSarray) então
para i = 0 para ubund (rsarray, 2)
para j = 0 para ubund (rsarray, 1)
Response.Write (RSARRAY (J, i) & <br> <br>)
próximo
próximo
final se
%>
O tempo de cache é de 10 minutos por padrão em segundos;