<%
REM XML -Cache -Klasse
Klasse xmlcachecls
Private m_dataconn 'Datenquelle muss geöffnet werden
Private m_cachetime 'Cachetime, standardmäßig 10 Minuten in Sekunden
Private m_xmlfile 'XML -Pfad, verwenden Sie absolute Adresse, es ist keine Erweiterung erforderlich
Private M_SQL 'SQL -Anweisung
Private M_SQLarr '(schreibgeschützte) Datenarray zurückgeben
Private m_readon '(schreibgeschützt) gibt die Lesemethode 1-Database 2-XML zur Erkennung zurück
'Class attributes=============================================== ===
'Datenquelle
Öffentliches Eigentum Set Conn (v)
Setzen Sie m_dataconn = v
Beenden Sie Eigentum
Öffentliches Eigentum bekommen Conn
Conn = m_dataconn
Beenden Sie Eigentum
'Cache -Zeit
Öffentliches Eigentum lassen Sie die Einzelperson (v)
m_cachetime = v
Beenden Sie Eigentum
Öffentliches Eigentum erhalten die Kapazität
CACHETIME = M_CACHETIME
Beenden Sie Eigentum
'XML -Pfad mit absoluter Adresse
Öffentliches Eigentum let xmlfile (v)
m_xmlfile = v
Beenden Sie Eigentum
Öffentliches Eigentum erhalten XMLFile
Xmlfile = m_xmlfile
Beenden Sie Eigentum
'SQL Anweisung
Öffentliches Eigentum lassen SQL (V)
m_sql = v
Beenden Sie Eigentum
Öffentliches Eigentum erhalten SQL
SQL = M_SQL
Beenden Sie Eigentum
'Kehren Sie zum Rekordarray zurück
Öffentliches Eigentum bekommen SQLARR
SQLARR = M_SQLARR
Beenden Sie Eigentum
'Kehren zur Lesemethode zurück
Öffentliches Eigentum Get Readon
Readon = m_readon
Beenden Sie Eigentum
'Class destruction=============================================== ==========
Private sub class_initialize () 'initialisieren Sie die Klasse
m_cachetime = 60*10 'Standard -Cache -Zeit beträgt 10 Minuten
Ende sub
Private sub class_terminate () 'Release -Klasse
Ende sub
'Public method of class============================================= ===============
Rem lesen Daten
Öffentliche Funktion Readdata
Wenn fSoexistsfile (M_XMLFILE) 'Es gibt einen XML -Cache, lesen Sie direkt aus dem XML
ReadDatafromxml
m_readon = 2
Anders
ReadDatafromDB
m_readon = 1
Ende wenn
Endfunktion
Rem schreiben XML -Daten
Öffentliche Funktion wititatatoxml
Wenn fSoexistsFile (m_xmlfile) dann 'Wenn XML nicht abgelaufen ist, beenden Sie direkt
Wenn nicht isxmlcacheexpired (m_xmlfile, m_cachetime) dann beenden Sie die Funktion
Ende wenn
Dim Rs
Dimer xmlContent
Dim k
xmlContent =
xmlContent = xmlContent & <? xml Version = 1.0 codieren = gb2312?> & vbNewline
xmlContent = xmlContent & <root> & vbNewline
K = 0
Setzen Sie rs = server.createObject (adodb.Recordset)
Rs.open M_SQL, M_DATAConn, 1
Zwar nicht rs.eof
xmlContent = xmlContent & <Artikel
Für jedes Feld in Rs.Fields
xmlContent = xmlContent & field.name & = & xmlstringenCode (field.value) &
Nächste
Rs.Movenext
K = K+1
xmlContent = xmlContent &> </item> & vbNewline
Wend
rs.close
Setzen Sie Rs = nichts
xmlContent = xmlContent & </root> & vbNewline
DIM -Ordnerpath
OrdnerPath = Trim (links (m_xmlfile, Instrrev (m_xmlfile,/)-1))
Call Createdir (OrdnerPath &) 'Ordner erstellen
WriteStringtoxmlFile M_XMLFILE, XMLContent
Endfunktion
'Private method of class============================================= ============
REM lesen Daten aus der XML -Datei
Private function readdatafromxml
Dim Sqlarr () 'Array
Dim xmldoc 'xmldoc -Objekt
Dimer Objnode 'Kinderknoten
Dunkle ElementLength 'Länge der untergeordneten Knoten
Dim AttributesLength 'Länge des Attributs des untergeordneten Knotens
Setzen Sie xmldoc = server.createObject (microsoft.xmldom)
Xmldoc.async = false
Xmldoc.load (m_xmlfile)
Setzen Sie objnode = xmldoc.documentElement 'Stammknoten erhalten
ItemsLength = objnode.childnodes.length 'Erhalten Sie die Länge des untergeordneten Knotens
Für items_i = 0 zu itemsLength-1
AttributeLength = objnode.childnodes (items_i) .attributes.length 'Länge des untergeordneten Knotenattributs
Für Attribute_I = 0 bis AttributesLength-1
REDIM Preserve SQLARR (AttributeLength-1, items_i)
Sqlarr (Attribute_i, items_i) = objnode.childnodes (items_i) .attributes (Attribute_i) .nodeValue
Nächste
Nächste
Setzen Sie xmldoc = nichts
M_SQLARR = SQLARR
Endfunktion
REM lesen Daten aus der Datenbank
Private function readdatafromdb
Dim Rs
Dim Sqlarr ()
Dim k
K = 0
Setzen Sie rs = server.createObject (adodb.Recordset)
Rs.open M_SQL, M_DATAConn, 1
Wenn nicht (rs.eof und rs.Bof) dann
Zwar nicht rs.eof
Dim Fieldlegth
fieldlegth = rs.fields.count
REDIM Preserve SQLARR (Fieldlegth, K)
Dim Fieldi
Für fielddi = 0 bis fieldlegth-1
SQLARR (Fieldi, K) = Rs.Fields (Fieldi) .Value
Nächste
Rs.Movenext
K = K+1
Wend
Ende wenn
rs.close
Setzen Sie Rs = nichts
M_SQLARR = SQLARR
Endfunktion
'Auxiliary private method of class============================================ ==========
Rem schreibt XML -Datei
Private sub WriteStringtoxmlfile (Dateiname, str)
Dim fs, ts
Setzen Sie fs = createObject (scripting.FilesSystemObject)
Wenn nicht IsObject (FS), beenden Sie Sub
Setzen Sie ts = fs.opentextfile (Dateiname, 2, true)
Ts.WriteLine (STR)
ts.close
Setzen Sie TS = nichts
Setzen Sie fs = nichts
Ende sub
REM stellt fest, ob der XML -Cache abläuft
Private Funktion isxmlcacheexpired (Datei, Sekunden)
Dimer Filelastime
filelasttime = fSogetFilElaTModifiedTime (Datei)
Wenn DATEADD (S, Sekunden, Filelastime) <jetzt dann
isxmlcacheexpired = true
Anders
isxmlcacheexpired = false
Ende wenn
Endfunktion
REM Erhalten Sie die letzte Änderungszeit der Datei
Private Funktion FSOGETFILELASTMODIFFIFTTIME (Datei)
Dim fso, f, s
Setzen Sie fso = createObject (scripting.filesystemObject)
Setzen Sie f = fso.getFile (Datei)
FSOGETFILELASTMODIFIDIDYTime = F.DatelastModified
Setzen Sie f = nichts
Fso = nichts setzen
Endfunktion
Gibt es die REM -Datei?
Öffentliche Funktion fSOExistsFile (Datei)
Dim fso
Setzen Sie fso = server.createObject (scripting.FilesystemObject)
Wenn fso.FileExists (Datei) dann
FSoexistsFile = true
Anders
FSoexistsFile = false
Ende wenn
Fso = nichts setzen
Endfunktion
REM XML Escape -Zeichen
Private Funktion xmlstringenCode (STR)
Wenn Str & = dann xmlstringenCode =: Ausgangsfunktion
str = ersetzen (str, <, <)
str = ersetzen (str,>,>)
str = ersetzen (str, ', & apos;)
str = ersetzen (str ,,)
STR = Ersatz (str, &, &)
XmlstringenCode = str
Endfunktion
REM -Ordner erstellen
Private Funktion erstellte (Byval Local Pathe)
Bei der nächsten Fehleraufnahme als nächstes
Dim I, FileObject, Patharr, Path_Level, Pathtmp, CPath
LokalPath = Ersetzen (lokaler Anpass,/,)
Set FileObject = server.createObject (scripting.filesystemObject)
Patharr = Split (lokaler Anit in/)
Path_Level = Ubound (Patharr)
Für i = 0 bis path_level
Wenn i = 0 dann
Pathtmp = Patharr (0) & /
Anders
pathtmp = pathtmp & patharr (i) & /
Ende wenn
cpath = links (pathtmp, len (pathtmp) -1)
Wenn nicht FileObject.FodereRexists (CPATH) dann
'Response.write cpath
FileObject.CreateFolder CPath
Ende wenn
Nächste
Setzen Sie FileObject = nichts
Wenn err.number <> 0 dann
Createdir = false
err.clear
Anders
Createdir = true
Ende wenn
Endfunktion
Endklasse
'Cache setzen
Funktionsetcache (XMLFilepath, Cachetime, Conn, SQL)
Setzen Sie Cache = New XMLCachecls
Setzen Sie Cache.Conn = conn
cache.xmlfile = xmlfilepath
cache.sql = sql
cache.cachetime = Cachetime
cache.writedatatoxml
Cache einstellen = nichts
Endfunktion
'Lesen Sie Cache
Funktion ReadCache (XMLFilepath, Conn, SQL, Byref Readon)
Setzen Sie Cache = New XMLCachecls
Setzen Sie Cache.Conn = conn
cache.xmlfile = xmlfilepath
cache.sql = sql
cache.readdata
ReadCache = cache.sqlarr
Readon = cache.readon
Endfunktion
%>
Wie man verwendet:
1 Cache -Daten in XML
Code:
Programmcode
<!-#include File = conn.asp->
<!-#include file = xml.asp->
<%
Setzen Sie Cache = New XMLCachecls
Setzen Sie Cache.Conn = conn
cache.xmlfile = server.mappath (xmlcache/index/top.xml)
cache.sql = wählen
cache.writedatatoxml
%>
2 Lesen Sie zwischengespeicherte Daten
Code:
Programmcode
<!-#include File = conn.asp->
<!-#include file = xml.asp->
<%
Setzen Sie Cache = New XMLCachecls
Setzen Sie Cache.Conn = conn
cache.xmlfile = server.mappath (xmlcache/index/top.xml)
cache.sql = wählen
cache.readdata
rsarray = cache.sqlarr
Wenn isarray (rsarray) dann
für i = 0 bis ubund (rsarray, 2)
für J = 0 bis Ubund (Rsarray, 1)
response.write (rsarray (j, i) & <br> <br>)
nächste
nächste
Ende wenn
%>
Die Cache -Zeit beträgt standardmäßig in Sekunden.