<%
Classe de cache Rem XML
'------------------------------------------------ - ------------------
'Por favor, guarde as informações de direitos autorais ao reimprimir
'Autor: ╰⑥月の雨╮
'Versão: ver1.0
'Esta classe baseia-se parcialmente na classe de cache de dados walkmanxml, que é mais conveniente de usar para se comunicar e progredir.
'------------------------------------------------ - ------------------
Classe XmlCacheCls
Private m_DataConn 'Fonte de dados, deve estar aberta
Private m_CacheTime 'Tempo de cache, em segundos, o padrão é 10 minutos
Caminho xml privado m_XmlFile ', use endereço absoluto, nenhuma extensão necessária
Instrução SQL privada m_Sql '
Private m_SQLArr '(somente leitura) retornou matriz de dados
Private m_ReadOn '(somente leitura) Retorna
as propriedades do modo de leitura 1-database 2-xml para detecção ============================ ==============
'Fonte de dados
Conjunto de propriedade pública Conn(v)
Definir m_DataConn = v
Fim da propriedade
Propriedade pública obter conexão
Conexão = m_DataConn
Finalizar propriedade
'Tempo de cache
Propriedade pública Let CacheTime(v)
m_CacheTime = v
Fim da propriedade
Propriedade Pública Obter CacheTime
CacheTime = m_CacheTime
End Property
'caminho xml, use endereço absoluto
Propriedade pública Let XmlFile(v)
m_XmlArquivo = v
Fim da propriedade
Propriedade pública GetXmlFile
ArquivoXml = m_XmlArquivo
Fim da propriedade
'instrução SQL
Propriedade pública Deixe Sql (v)
m_Sql=v
Fim da propriedade
Propriedade Pública Obter SQL
Sql=m_Sql
Fim da propriedade
'Retorna matriz de registros
Propriedade Pública Obter SQLArr
SQLArr=m_SQLArr
End Property
'Retorna ao modo de leitura
Propriedade pública Obtenha leitura
ReadOn = m_ReadOn
End Property
'Destruição da classe
================================================================================================================================================================================================== Class_Initialize() 'Inicializa classe
m_CacheTime=60*10 'O tempo de cache padrão é 10 minutos
End Sub
Private Sub Class_Terminate() 'Libera classe
End Sub
'Método público da classe ================================== ========
Rem lê dados
Função pública ReadData
If FSOExistsFile(m_XmlFile) Then 'Cache XML existe, leia diretamente do xml
ReadDataFromXml
m_ReadOn=2
Outro
LerDataFromDB
m_ReadOn=1
Terminar se
End Function
Rem grava dados XML
Função pública WriteDataToXml
If FSOExistsFile(m_XmlFile) Then 'Sair diretamente se o xml não tiver expirado
Se não for isXmlCacheExpired(m_XmlFile,m_CacheTime) então saia da função
Terminar se
Escurece
Conteúdo Dimxml
Escurecer
xmlcontent = ""
xmlcontent = xmlcontent & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbnewline
xmlcontent = xmlcontent & "<root>" & vbnewline
k=0
Definir Rs = Server.CreateObject("Adodb.Recordset")
Rs.abrir 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.movnext
k=k+1
xmlcontent = xmlcontent & "></item>" & vbnewline
Wend
rs.fechar
Setrs=Nada
xmlcontent = xmlcontent & " </root>" & vbnewline
Dim caminho da pasta
caminho da pasta = Trim(left(m_XmlFile,InstrRev(m_XmlFile,"")-1))
Chame CreateDIR(folderpath&"") 'Criar pasta
WriteStringToXMLFile m_XmlFile,xmlcontent
End Function
'Método privado da classe============================================
Rem dos dados de leitura do arquivo XML
Função privada ReadDataFromXml
Dim SQLARR() 'Array
Dim XmlDoc 'Objeto XmlDoc
Dim objNode 'nó filho
Dim ItemsLength 'O comprimento do nó filho
Dim AttributesLength 'O comprimento dos atributos do nó filho
Definir XmlDoc=Server.CreateObject("Microsoft.XMLDOM")
XmlDoc.Async=Falso
XmlDoc.Load(m_XmlFile)
Set objNode=XmlDoc.documentElement 'Obtém o nó raiz
ItemsLength=objNode.ChildNodes.length 'Obtém o comprimento dos nós filhos
Para items_i=0 Para ItemsLength-1
AttributesLength=objNode.childNodes(items_i).Attributes.length 'Obtém o comprimento dos atributos do nó filho
Para Attributes_i=0 Para AttributesLength-1
ReDim Preserve SQLARR(AttributesLength-1,items_i)
SQLArr(Atributos_i,items_i) = objNode.childNodes(items_i).Atributos(Atributos_i).Nodevalue
Próximo
Próximo
Definir XmlDoc = Nada
m_SQLArr = SQLARR
End Function
Rem lê dados do banco de dados
Função privada ReadDataFromDB
Escurece
DimSQLARR()
Escurecer
k=0
Definir Rs = Server.CreateObject("Adodb.Recordset")
Rs.abrir m_sql,m_DataConn,1
Se não (rs.eof e rs.bof) então
Embora não seja rs.eof
Dim comprimento do campo
fieldlegth = rs.Fields.count
ReDim Preserve SQLARR(fieldlegth,k)
Campo escuro
Para campoi = 0 Para campolegth-1
SQLArr(campoi,k) = rs.Fields(campoi).valor
Próximo
rs.movnext
k=k+1
Wend
Terminar se
rs.fechar
Setrs=Nada
m_SQLArr = SQLArr
End Function
'Método privado auxiliar da classe========================================= ==
Rem Grava arquivo xml
Sub privado WriteStringToXMLFile (nome do arquivo, str)
Dim fs,ts
Definir fs = createobject("scripting.filesystemobject")
Se não for IsObject(fs), então saia do Sub
Definir ts=fs.OpenTextFile(nome do arquivo,2,True)
ts.writeline(str)
ts.fechar
Definir ts=Nada
Definir fs=Nada
End Sub
Rem determina se o cache xml expirou
Função privada isXmlCacheExpired (arquivo, segundos)
Escurecer arquivo pela última vez
arquivolasttime = FSOGetFileLastModifiedTime(arquivo)
If DateAdd("s",seconds,filelasttime) < Agora Então
isXmlCacheExpired = Verdadeiro
Outro
isXmlCacheExpired = Falso
Terminar se
End Function
Rem obtém a hora da última modificação do arquivo
Função privada FSOGetFileLastModifiedTime (arquivo)
Dim fso,f,s
Definir fso=CreateObject("Scripting.FileSystemObject")
Definir f=fso.GetFile(arquivo)
FSOGetFileLastModifiedTime = f.DateLastModified
Definir f = Nada
Definir fso = Nada
O
arquivo End Function Rem existe?
Função Pública FSOExistsFile(arquivo)
Escurecer fso
Definir fso = Server.CreateObject("Scripting.FileSystemObject")
Se fso.FileExists(arquivo) Então
FSOExistsFile = verdadeiro
Outro
FSOExistsFile = falso
Terminar se
Defina fso = nada
End Function
Rem xml
Função privada XMLStringEnCode(str)
Se str&"" = "" Então XMLStringEnCode="": Função de saída
str = Substituir(str,"<","<")
str = Substituir(str,">",">")
str = Substituir(str,"'","'")
str = Substituir(str,"""",""")
str = Substituir(str,"&","&")
XMLStringEnCode =str
Função final
Rem Criar pasta
Função privada CreateDIR(byval LocalPath)
Em caso de erro, retomar o próximo
Dim i,FileObject,patharr,path_level,pathtmp,cpath
LocalPath = Substituir(LocalPath,"","/")
Definir FileObject = server.createobject("Scripting.FileSystemObject")
caminho = Split(LocalPath,"/")
path_level = UBound(patharr)
Para i = 0 Para path_level
Se eu = 0 então
pathtmp=patharr(0) & "/"
Outro
caminhotmp = caminhotmp & caminhoarr(i) & "/"
Terminar se
cpath = esquerda(caminhotmp,len(caminhotmp)-1)
Se não for FileObject.FolderExists (cpath), então
'Resposta.write cpath
FileObject.CreateFolder cpath
Terminar se
Próximo
Definir FileObject = Nada
Se err.number<>0 Então
CriarDIR = Falso
err.Limpar
Outro
CriarDIR = Verdadeiro
Terminar se
Função final
Fim da aula
'Definir 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
'Ler 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
%>
Uso:
1 cache de dados para xml
código:
código do programa
<!--#include file="Conn.asp"-->
<!--#include arquivo="Xml.asp"-->
<%
definir cache = novo XmlCacheCls
Definir cache.Conn=conn
cache.XmlFile=Server.Mappath("xmlcache/index/Top.xml")
cache.Sql = "selecione os 15 principais prod_id, prod_name, prod_uptime de tblProduction"
cache.WriteDataToXml
%>
2 Código para ler dados em cache
:
código do programa
<!--#include file="Conn.asp"-->
<!--#include arquivo="Xml.asp"-->
<%
definir cache = novo XmlCacheCls
Definir cache.Conn=conn
cache.XmlFile=Server.Mappath("xmlcache/index/Top.xml")
cache.Sql = "selecione os 15 principais prod_id, prod_name, prod_uptime de tblOrdem de produção por prod_id asc"
cache.ReadData
rsArray=cache.SQLArr
se isArray(rsArray) então
para i=0 para ubound(rsArray,2)
para j=0 para ubound(rsArray,1)
resposta.Write(rsArray(j,i)&"<br><br>")
próximo
próximo
terminar se
%>
Tempo de cache, a unidade padrão é 10 minutos em segundos, você também pode definir cache.CacheTime=60*30 30 minutos;