<%
Classe de cache Rem XML
'------------------------------------------------ - -------------------
'Veuillez conserver les informations de copyright lors de la réimpression
'Auteur : ╰⑥月の雨╮
'Version : ver1.0
'Cette classe s'appuie en partie sur la classe de cache de données walkmanxml, qui est plus pratique à utiliser Welcome pour communiquer et progresser.
'------------------------------------------------ - -------------------
Classe XmlCacheCls
Private m_DataConn 'Source de données, doit être ouverte
Private m_CacheTime 'Durée du cache, en secondes, la valeur par défaut est 10 minutes
Chemin xml privé m_XmlFile ', utilise une adresse absolue, aucune extension requise
Instruction SQL m_Sql 'privée
Private m_SQLArr '(lecture seule) a renvoyé un tableau de données
Private m_ReadOn '(Lecture seule) Renvoie
les propriétés du mode de lecture 1-base de données 2-xml pour la détection ============================= ==============
'Source de données
Ensemble de propriétés publiques Conn(v)
Définir m_DataConn = v
Propriété de fin
Propriété publique Get Conn
Conn = m_DataConn
Propriété de fin
'Temps de cache
Propriété publique Laisser CacheTime(v)
m_CacheTime = v
Propriété de fin
Propriété publique Obtenir CacheTime
TempsCache = m_CacheTime
la propriété de fin
, utilisez l'adresse absolue
Propriété publique Let XmlFile(v)
m_XmlFichier = v
Propriété de fin
Propriété publique GetXmlFile
FichierXml = m_FichierXml
Instruction SQL de
la propriété de fin
Propriété publique Let Sql(v)
m_Sql =v
Propriété de fin
Propriété publique Obtenir SQL
SQL = m_Sql
Propriété de fin
'Renvoyer le tableau d'enregistrement
Propriété publique Obtenir SQLArr
SQLArr = m_SQLArr
End Property
'Retour au mode lecture
Propriété publique
LectureOn = m_ReadOn
Fin de la propriété
'Destruction de la classe ==========================================
Sous-privé Class_Initialize() 'Initialiser la classe
m_CacheTime=60*10 'La durée du cache par défaut est de 10 minutes
End Sub
Private Sub Class_Terminate() 'Libérer la classe
End Sub
'Méthode publique de la classe =================================== ========
Rem lit les données
Fonction publique ReadData
Si FSOExistsFile(m_XmlFile) Alors « Le cache XML existe, lisez directement à partir de XML
LireDonnéesFromXml
m_ReadOn=2
Autre
Lire les données de la base de données
m_ReadOn=1
Fin si
End Function
Rem écrit des données XML
Fonction publique WriteDataToXml
If FSOExistsFile(m_XmlFile) Then 'Quitter directement si XML n'a pas expiré
Si ce n'est pas le cas, isXmlCacheExpired (m_XmlFile, m_CacheTime), puis quittez la fonction
Fin si
Dimrs
Contenu Dimxml
Dim k
contenu xml = ""
xmlcontent = xmlcontent & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbnewline
xmlcontent = xmlcontent & " <racine>" & vbnewline
k=0
Définir Rs = Server.CreateObject("Adodb.Recordset")
Rs.open m_sql,m_DataConn,1
Bien que ce ne soit pas rs.eof
xmlcontent = xmlcontent & " <élément "
Pour chaque champ dans rs.Fields
xmlcontent = xmlcontent & field.name & "=""" & XMLStringEnCode(field.value) & """ "
Suivant
rs.movenext
k=k+1
xmlcontent = xmlcontent & "></item>" & vbnewline
Wende
rs.fermer
Setrs=Rien
xmlcontent = xmlcontent & " </root>" & vbnewline
Dim chemin du dossier
chemin du dossier = Trim(left(m_XmlFile,InstrRev(m_XmlFile,"")-1))
Appelez CreateDIR(folderpath&"") 'Créer un dossier
WriteStringToXMLFile m_XmlFile, contenu xml
End Function
'Méthode privée de classe ============================================
Rem à partir des données de lecture du fichier XML
Fonction privée ReadDataFromXml
Dim SQLARR() 'Tableau
Dim XmlDoc 'Objet XmlDoc
Dim objNode 'nœud enfant
Dim ItemsLength 'La longueur du nœud enfant
Dim AttributesLength 'La longueur des attributs du nœud enfant
Définir XmlDoc=Server.CreateObject("Microsoft.XMLDOM")
XmlDoc.Async=False
XmlDoc.Load(m_XmlFile)
Set objNode=XmlDoc.documentElement 'Obtenir le nœud racine
ItemsLength=objNode.ChildNodes.length 'Obtenir la longueur des nœuds enfants
Pour items_i = 0 à ItemsLength-1
AttributesLength=objNode.childNodes(items_i).Attributes.length 'Obtenir la longueur des attributs du nœud enfant
Pour Attributes_i=0 À AttributesLength-1
ReDim préserve SQLARR (AttributesLength-1, items_i)
SQLArr(Attributes_i,items_i) = objNode.childNodes(items_i).Attributes(Attributes_i).Nodevalue
Suivant
Suivant
Définir XmlDoc = Rien
m_SQLArr = SQLARR
End Function
Rem lit les données de la base de données
Fonction privée ReadDataFromDB
Dimrs
DimSQLARR()
Dim k
k=0
Définir Rs = Server.CreateObject("Adodb.Recordset")
Rs.open m_sql,m_DataConn,1
Si non (rs.eof et rs.bof) Alors
Bien que ce ne soit pas rs.eof
Longueur de champ faible
fieldlegth = rs.Fields.count
ReDim Preserve SQLARR (fieldlegth, k)
Champ faible
Pour fieldi = 0 Vers fieldlegth-1
SQLArr(fieldi,k) = rs.Fields(fieldi).value
Suivant
rs.movenext
k=k+1
Wende
Fin si
rs.fermer
Setrs=Rien
m_SQLArr = SQLArr
End Function
'Méthode privée auxiliaire de la classe========================================= ==
Rem Écrire le fichier XML
Sous-privé WriteStringToXMLFile (nom de fichier, str)
Dim fs,ts
Définir fs= createobject("scripting.filesystemobject")
Si ce n'est pas IsObject (fs), alors quittez Sub
Définir ts=fs.OpenTextFile(filename,2,True)
ts.writeline(str)
ts.fermer
Définir ts=Rien
Définir fs=Rien
End Sub
Rem détermine si le cache XML a expiré
Fonction privée isXmlCacheExpired (fichier, secondes)
Dim fichier la dernière fois
fichierlasttime = FSOGetFileLastModifiedTime (fichier)
Si DateAdd("s",seconds,filelasttime) < Maintenant Alors
isXmlCacheExpired = Vrai
Autre
isXmlCacheExpired = Faux
Fin si
End Function
Rem obtient l'heure de la dernière modification du fichier
Fonction privée FSOGetFileLastModifiedTime (fichier)
Dim fso,f,s
Définir fso=CreateObject("Scripting.FileSystemObject")
Définir f=fso.GetFile(fichier)
FSOGetFileLastModifiedTime = f.DateLastModified
Définir f = Rien
Définir fso = Rien
Le
fichier End Function Rem existe-t-il ?
Fonction publique FSOExistsFile(fichier)
Faible fso
Définir fso = Server.CreateObject("Scripting.FileSystemObject")
Si fso.FileExists(fichier) Alors
FSOExistsFile = vrai
Autre
FSOExistsFile = faux
Fin si
Définir fso = rien
Caractère d'échappement Rem XML
de la fonction de fin
Fonction privée XMLStringEnCode(str)
Si str&"" = "" Then XMLStringEnCode="":Fonction de sortie
str = Remplacer(str,"<","<")
str = Remplacer(str,">",">")
str = Remplacer(str,"'","'")
str = Remplacer(str,"""",""")
str = Remplacer(str,"&","&")
XMLStringEnCode = chaîne
Fin de la fonction
Rem Créer un dossier
Fonction privée CreateDIR (byval LocalPath)
En cas d'erreur, reprendre ensuite
Dim i, FileObject, patharr, path_level, pathtmp, cpath
LocalPath = Remplacer(LocalPath,"","/")
Définir FileObject = server.createobject("Scripting.FileSystemObject")
patharr = Split(CheminLocal,"/")
path_level = UBound(patharr)
Pour i = 0 Vers path_level
Si je=0 Alors
chemintmp=cheminarr(0) & "/"
Autre
chemintmp = chemintmp & cheminarr(i) & "/"
Fin si
cpath = gauche(chemintmp,len(chemintmp)-1)
Si ce n'est pas le cas FileObject.FolderExists (cpath) alors
'Réponse.écrire cpath
FileObject.CreateFolder cpath
Fin si
Suivant
Définir FileObject = Rien
Si numéro d'erreur <>0 Alors
CréerDIR = Faux
err.Effacer
Autre
CréerDIR = Vrai
Fin si
Fonction de fin
Fin du cours
'Définir le cache
Fonction SetCache(xmlFilePath,CacheTime,Conn,Sql)
définir le cache = nouveau XmlCacheCls
Définir cache.Conn=Conn
cache.XmlFile=xmlFilePath
cache.Sql=Sql
cache.CacheTime=CacheTime
cache.WriteDataToXml
Définir le cache = Rien
Fonction de fin
'Lire le cache
Fonction ReadCache (xmlFilePath, Conn, SQL, ByRef ReadOn)
définir le cache = nouveau XmlCacheCls
Définir cache.Conn=conn
cache.XmlFile=xmlFilePath
cache.Sql=Sql
cache.ReadData
ReadCache=cache.SQLArr
ReadOn=cache.ReadOn
Fonction de fin
%>
Utilisation :
1 données en cache vers XML
code :
code du programme
<!--#include file="Conn.asp"-->
<!--#include file="Xml.asp"-->
<%
définir le cache = nouveau XmlCacheCls
Définir cache.Conn=conn
cache.XmlFile=Server.Mappath("xmlcache/index/Top.xml")
cache.Sql="sélectionner les 15 meilleurs prod_id, prod_name, prod_uptime de tblProduction"
cache.WriteDataToXml
%>
2 Code pour lire les données mises en cache
:
code de programme
<!--#include file="Conn.asp"-->
<!--#include file="Xml.asp"-->
<%
définir le cache = nouveau XmlCacheCls
Définir cache.Conn=conn
cache.XmlFile=Server.Mappath("xmlcache/index/Top.xml")
cache.Sql="sélectionner les 15 meilleurs prod_id, prod_name, prod_uptime à partir de l'ordre tblProduction par prod_id asc"
cache.ReadData
rsArray=cache.SQLArr
si isArray(rsArray) alors
pour i=0 à ubound(rsArray,2)
pour j=0 à ubound(rsArray,1)
réponse.Write(rsArray(j,i)&"<br><br>")
suivant
suivant
finir si
%>
Temps de cache, l'unité par défaut est de 10 minutes en secondes ; vous pouvez également définir vous-même cache.CacheTime=60*30 30 minutes ;