<%
Classe de cache Rem XML
Classe XMLCACKECLS
La source de données privée M_Dataconn 'doit être ouverte
Cachetime privé M_Cachetime ', par défaut à 10 minutes en secondes
PATAIN PRIVÉ M_XMLFILE 'XML, Utilisez l'adresse absolue, aucune extension n'est requise
Instruction privée M_SQL 'SQL
M_SQLarr 'privé' (Read only) Return Data Array
Private M_readon '(en lecture seule) Renvoie la méthode de lecture 1-Database 2-XML pour la détection
'Class Attributes ============================================================ ===
'Source de données
Ensemble de propriétés publiques Conn (V)
Définir m_dataconn = v
Propriété finale
Propriété publique Obtenez Conn
Conn = m_dataconn
Propriété finale
'Temps de cache
Propriété publique Let Cachetime (V)
m_cachetime = v
Propriété finale
La propriété publique obtient cachetime
Cachetime = m_cachetime
Propriété finale
'Path XML, avec adresse absolue
Propriété publique Soit XMLFile (V)
m_xmlfile = v
Propriété finale
Propriété publique Obtenez XMLFile
Xmlfile = m_xmlfile
Propriété finale
'Instruction SQL
Propriété publique Let SQL (V)
m_sql = v
Propriété finale
La propriété publique obtient SQL
SQL = M_SQL
Propriété finale
'Retour au tableau d'enregistrement
Propriété publique Get Sqrarr
Sqrarr = m_sqlarr
Propriété finale
'Retour à la méthode de lecture
Propriété publique Obtenez Readon
Readon = m_readon
Propriété finale
'Destruction de classe =========================================================== =========
Private Sub class_Initialize () 'Initialiser la classe
m_cachetime = 60 * 10 'le temps de cache par défaut est de 10 minutes
Sub-Sub
Classe de libération de sous-classe Private Sub class_termiate ()
Sub-Sub
'Méthode publique de classe =========================================================== ==============
Données de lecture REM
Fonction publique Readdata
Si fsoexistsfile (m_xmlfile) alors «il y a un cache XML, lisez directement à partir du XML
Redatafromxml
m_readon = 2
Autre
Redatafromdb
m_readon = 1
Terminer si
Fonction finale
REM Écrivez des données XML
Fonction publique Portésatoxml
Si fsoexistsfile (m_xmlfile) alors 'si XML n'a pas expiré, sortez directement
Si non ISXMLCACKEEXPURD (M_XMLFILE, M_CACHETIME), puis la fonction de sortie
Terminer si
Rs sombre
DIM XMLCONTENT
Dim
xmlcontent =
XMLContent = XMLContent & <? XML Version = 1.0 Encoding = GB2312?> & VBNewline
xmlcontent = xmlcontent & <hoot> & vbnewline
k = 0
Set rs = server.createObject (adodb.recordSet)
Rs.Open M_SQL, M_DATACONN, 1
Bien que pas Rs.Eof
xmlcontent = xmlcontent & <item
Pour chaque champ dans Rs. champs
xmlContent = xmlcontent & field.name & = & xmlStRingEncode (field.value) &
Suivant
Rs.MovEnext
k = k + 1
xmlContent = xmlcontent &> </ item> & vbnewline
Se promener
Rs.Close
Définir RS = rien
xmlcontent = xmlcontent & </root> & vbnewline
Chemin de dossie
FolderPath = TRIM (gauche (m_xmlfile, instrrrev (m_xmlfile, /) - 1))
Appel Createir (FolderPath &) 'Créer un dossier
WriteStringToxmlfile m_xmlfile, xmlcontent
Fonction finale
'Méthode privée de classe ===========================================================. ===========
REM Lire les données du fichier XML
Fonction privée redatafromxml
Dim sqrarr () 'tableau
Objet XMLDOC DIM XMLDOC
Node enfant de Dim Objnode
Dim ItemsLength Longueur des nœuds enfants
Dim AttributeLength Longueur du nœud enfant Attribut
SET XMLDOC = Server.CreateObject (Microsoft.xmldom)
XmlDoc.async = false
Xmldoc.load (m_xmlfile)
Définir objnode = xmldoc.DocumentElement 'Get Root Node
ItemsLength = objnode.childnodes.length 'Obtenez la longueur du nœud enfant
Pour items_i = 0 à itemsLength-1
AttributeLength = objnode.childnodes (items_i) .attributes.length 'Obtenez la longueur de l'attribut de nœud enfant
Pour attributs_i = 0 à AttributesLength-1
Redim Preserve Sqrarr (AttributesLength-1, items_i)
Sqrarr (attributs_i, items_i) = objnode.childnodes (items_i) .attributes (attributs_i) .Nodevalue
Suivant
Suivant
Définir XMLDOC = Rien
m_sqlarr = sqrarr
Fonction finale
REM Lire les données de la base de données
Fonction privée redatafromdb
Rs sombre
Dim sqrarr ()
Dim
k = 0
Set rs = server.createObject (adodb.recordSet)
Rs.Open M_SQL, M_DATACONN, 1
Sinon (Rs.Eof et Rs.bof) alors
Bien que pas Rs.Eof
Arme de terrain faible
Fieldlegth = Rs.fields.Count
Redim Preserve Sqlarr (Fieldledgth, K)
Dim Fieldi
Pour fielddi = 0 à Fieldledgth-1
Sqrarr (Fieldi, K) = Rs.fields (Fieldi) .Value
Suivant
Rs.MovEnext
k = k + 1
Se promener
Terminer si
Rs.Close
Définir RS = rien
m_sqlarr = sqrarr
Fonction finale
'Méthode privée auxiliaire de classe =========================================================. =========
Rem écrit le fichier XML
Private Sub WriteStringToxMlfile (nom de fichier, STR)
DIM FS, TS
Set fs = createObject (scripting.fileSystemObject)
Si ce n'est pas IsObject (FS), alors quittez le sous
SET TS = FS.OPENEXTFILE (Nom de fichier, 2, true)
T.WriteLine (STR)
ts.close
Définir TS = rien
Définir FS = rien
Sub-Sub
REM détermine si le cache XML expire
Fonction privée ISXMLCACHEEXPIRED (fichier, secondes)
Dim FilelastTime
FileLastTime = fsoGetFileLastModifiedTime (fichier)
Si dataEadd (s, secondes, filelasttime) <maintenant
isxmlcacheexpired = true
Autre
isxmlcacheexpired = false
Terminer si
Fonction finale
REM Obtenez le dernier temps de modification du fichier
Fonction privée fsoGetFileLastModifiedTime (Fichier)
DIM FSO, F, S
Set fso = createObject (scripting.fileSystemObject)
Définir f = fso.getFile (fichier)
FsoGetFileLastModifiedTime = F.DatelastModified
Définir F = rien
Définir FSO = rien
Fonction finale
Le fichier REM existe-t-il?
Fonction publique fsoexistsfile (fichier)
DIM FSO
Set fso = server.createObject (scripting.fileSystemObject)
Si fso.fileexists (fichier) alors
FsoExistSFile = true
Autre
Fsoexistsfile = false
Terminer si
Définir FSO = rien
Fonction finale
Rem XML Escape Caractères
Fonction privée XMLStRINGENCODODE (STR)
Si str & = alors xmlStRingEncode =: fonction de sortie
str = remplacer (str, <, <)
str = remplacer (str,>,>)
str = remplacer (str, ', & apos;)
str = remplacer (str ,,)
str = remplacer (str, &, &)
XmlStRINGENCODE = Str
Fonction finale
REM Créer un dossier
Fonction privée Createdir (Byval localPath)
Sur l'erreur reprendre ensuite
Dim i, fileObject, patharr, path_level, pathtmp, cPath
LocalPath = remplacer (localPath, /, /)
Set fileObject = server.createObject (scripting.filesystemObject)
patharr = fendre (localPath, /)
path_level = ubound (patharr)
Pour i = 0 à path_level
Si i = 0 alors
pathtmp = patharr (0) & /
Autre
pathtmp = pathtmp & patharr (i) & /
Terminer si
cpath = gauche (pathtmp, len (pathtmp) -1)
Si non fileObject.folderexists (cpath) alors
'Réponse.WRITE CPATH
FileObject.createfolder cPath
Terminer si
Suivant
Set fileObject = rien
Si err.number <> 0 alors
CreateDir = false
err.Clear
Autre
CreateDir = true
Terminer si
Fonction finale
Classe finale
'Set Cache
Fonction setCache (xmlfilepath, cachetime, conn, sql)
Set Cache = Nouveau XMLCachecls
Définir Cache.Conn = Conn
cache.xmlfile = xmlfilepath
cache.sql = sql
cache.cachetime = cachetime
cache.writeatatoxml
Définir le cache = rien
Fonction finale
'Lire le cache
Fonction ReadCache (XMLFilePath, Conn, SQL, ByRef Readon)
Set Cache = Nouveau XMLCachecls
Définir Cache.Conn = Conn
cache.xmlfile = xmlfilepath
cache.sql = sql
cache.readdata
Readcache = cache.sqlarr
Readon = cache.readon
Fonction finale
%>
Comment utiliser:
1 Données de cache à XML
Code:
Code de programme
<! - # Inclure File = Conn.asp ->
<! - # Inclure file = xml.asp ->
<%
Set 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 tblproduction
cache.writeatatoxml
%>
2 Lisez les données mises en cache
Code:
Code de programme
<! - # Inclure File = Conn.asp ->
<! - # Inclure file = xml.asp ->
<%
Set Cache = Nouveau XMLCachecls
Définir Cache.Conn = Conn
cache.xmlfile = server.mappath (xmlcache / index / top.xml)
cache.sql = sélectionner les 15 premiers 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 à Ubund (RSArray, 2)
pour j = 0 à Ubund (RSArray, 1)
Response.Write (RSArray (J, I) & <br> <br>)
suivant
suivant
terminer si
%>
Le temps de cache est de 10 minutes par défaut en secondes;