<%
REM XML CACE Class
Класс Xmlcachecls
Частный источник данных M_DATACONN должен быть открыт
Private M_Cachetime 'CacheTime, по умолчанию до 10 минут в секундах
Частный путь m_xmlfile 'xml, используйте абсолютный адрес, продление не требуется
Приватный оператор M_SQL 'SQL
Private M_SQLARR '(только для чтения) вернуть массив данных
Private M_Readon '(только для чтения) возвращает метод чтения 1-датабаза 2-XML для обнаружения
'Атрибуты класса =========================================================================== ===
'Источник данных
Общественная недвижимость установлен Conn (v)
Установить m_dataconn = v
Конец собственности
Общественная недвижимость получите Conn
Conn = m_dataconn
Конец собственности
'Кэш Время
Общественная собственность пусть CacheTime (v)
m_cachetime = v
Конец собственности
Общественная собственность получает в качее время
Cachetime = m_cachetime
Конец собственности
'xml Path, с абсолютным адресом
Публичная собственность пусть Xmlfile (v)
m_xmlfile = v
Конец собственности
Общественная недвижимость получает Xmlfile
Xmlfile = m_xmlfile
Конец собственности
'SQL заявление
Общественная собственность пусть SQL (V)
m_sql = v
Конец собственности
Общественная недвижимость получить SQL
SQL = M_SQL
Конец собственности
'Вернитесь в рекордскую массив
Общественная собственность получает SQLARR
SQLARR = M_SQLARR
Конец собственности
'Вернитесь в метод чтения
Общественная недвижимость получите Readon
Readon = m_readon
Конец собственности
'Уничтожение класса =========================================================================== =========
Private sub class_initialize () 'инициализируйте класс
m_cachetime = 60*10 'Время кэша по умолчанию составляет 10 минут
Конец суб
Private sub class_terminate () 'Class
Конец суб
'Публичный метод класса ======================================================================= ==============
REM Прочитайте данные
Публичная функция readdata
Если fsoExistsFile (m_xmlfile), то есть кэш XML, прочитайте непосредственно из XML
Readdatafromxml
m_readon = 2
Еще
Readdatafromdb
m_readon = 1
Конец, если
Конечная функция
REM Напишите данные XML
Общественная функция writedatatoxml
Если FSOexistsFile (m_xmlfile), то «Если XML не истек, выходите напрямую
Если нет isxmlcacheexpired (m_xmlfile, m_cachetime), тогда выходит функция
Конец, если
Dim Rs
Dim XmlContent
Dim K.
xmlcontent =
xmlcontent = xmlcontent & <? xml version = 1.0 Encoding = gb2312?> & vbnewline
xmlcontent = xmlcontent & <root> & vbnewline
k = 0
Установить rs = server.createObject (adodb.recordset)
Rs.open m_sql, m_dataconn, 1
Хотя не рупий
xmlcontent = xmlcontent & <item
Для каждого поля в Rs.fields
xmlcontent = xmlcontent & field.name & = & xmlstringencode (field.value) &
Следующий
Rs.movenext
k = k+1
xmlcontent = xmlcontent &> </item> & vbnewline
Венд
Rs.close
Установить RS = ничего
xmlcontent = xmlcontent & </root> & vbnewline
DIM FOLDERPATH
folderPath = trim (слева (m_xmlfile, instrrev (m_xmlfile,/)-1))
Call CreativeIr (FoterPath &) 'Create Polder
WritestringToxmlfile m_xmlfile, xmlcontent
Конечная функция
'Частный метод класса ======================================================================== ===========
REM Читать данные из XML -файла
Частная функция readdataFromxml
Dim sqlarr () 'массив
Dim xmldoc 'xmldoc объект
Dim objnode 'Child Node
Dim Itemslength 'Длина дочерних узлов
Dim attributeslength 'Длина атрибута детского узла
Установить xmldoc = server.createObject (microsoft.xmldom)
Xmldoc.async = false
Xmldoc.load (m_xmlfile)
Установить objnode = xmldoc.documentelement 'Получить корневой узел
Itemslength = objnode.childnodes.length 'Получить длину детского узла
Для emits_i = 0 в itemslength-1
Attributeslength = objnode.childnodes (items_i) .attributes.length 'Получите длину атрибута узел дочернего узла
Для атрибутов_и = 0 для атрибутовли длины-1
Redim Searreer Sqlarr (AttributesLength-1, items_i)
Sqlarr (attributes_i, items_i) = objnode.childnodes (items_i) .attributes (attributes_i) .nodevalue
Следующий
Следующий
Установить XMLDOC = ничего
m_sqlarr = sqlarr
Конечная функция
REM считывать данные из базы данных
Частная функция readdatafromdb
Dim Rs
Dim sqlarr ()
Dim K.
k = 0
Установить rs = server.createObject (adodb.recordset)
Rs.open m_sql, m_dataconn, 1
Если нет (rs.eof и rs.bof), тогда
Хотя не рупий
Dim Fieldlegth
fieldlegth = rs.fields.count
Redim serve sqlarr (fieldlegth, k)
Dim Fieldi
Для Fielddi = 0 до fieldlegth-1
SQLarr (Fieldi, K) = Rs.fields (Fieldi)
Следующий
Rs.movenext
k = k+1
Венд
Конец, если
Rs.close
Установить RS = ничего
m_sqlarr = sqlarr
Конечная функция
'Вспомогательный частный метод класса ======================================================================== =========
REM записывает XML -файл
Private Sub writestringtoxmlfile (имя файла, str)
Dim fs, ts
Установить fs = createObject (scripting.filesystemobject)
Если нет isobject (fs), тогда выйдите
Установите ts = fs.opentextfile (имя файла, 2, true)
Ts.WriteLine (Str)
Ts.close
Установить TS = ничего
Установите fs = ничего
Конец суб
REM определяет, истекает ли кэш XML
Частная функция isxmlcacheexpired (файл, секунд)
Dim FileLasttime
FILELASTTIME = FSOGETFILELASTMODIFITITITION (файл)
Если DateAdd (s, секунды, FileLastTime) <Теперь тогда
isxmlcacheexpired = true
Еще
isxmlcacheexpired = false
Конец, если
Конечная функция
Rem Получите последнее время изменения файла
Частная функция fsogetfilelastmodifiedtime (файл)
Dim fso, f, s
Установить fso = createObject (scripting.filesystemobject)
Установить f = fso.getFile (файл)
Fsogetfilelastmodifiedtime = f.datelastmodified
Установить f = ничего
Установить FSO = ничего
Конечная функция
Существует ли файл REM?
Публичная функция fsoExistsfile (файл)
Dim FSO
Установить fso = server.createObject (scripting.filesystemobject)
Если fso.fileexists (файл), то
Fsoexistsfile = true
Еще
Fsoexistsfile = false
Конец, если
Установить FSO = ничего
Конечная функция
REM XML Escape символы
Приватная функция xmlstringencode (str)
Если str & = then xmlstringencode =: функция выхода
str = reply (str, <, <)
str = reply (str,>,>)
str = reply (str, ', & apos;)
str = заменить (str ,,)
str = reply (str & &)
Xmlstringencode = str
Конечная функция
REM создать папку
Частная функция CenectiR (Byval LocalPath)
При ошибке резюме следующим
Dim I, FileObject, Patharr, Path_level, Pathtmp, CPATH
LocalPath = заменить (localPath,/,/)
Set fileObject = server.createObject (scripting.filesystemobject)
patharr = split (localpath,/)
path_level = ubound (patharr)
Для i = 0 to path_level
Если я = 0, тогда
pathtmp = patharr (0) и / /
Еще
pathtmp = pathtmp & patharr (i) & / / / / / /e
Конец, если
CPATH = LEAND (PATHTMP, LEN (PATHTMP) -1)
Если не fileObject.folderexists (cpath), тогда
'Response.write cpath
FileObject.createFolder cpath
Конец, если
Следующий
Установить FileObject = ничего
Если err.number <> 0, тогда
CenectiR = false
err.clear
Еще
CenectiR = true
Конец, если
Конечная функция
Конечный класс
'Установите кеш
Функция setCache (XmlfilePath, CacheTime, Conn, SQL)
SET CACHE = NEW XMLCACHECLS
Установить cache.conn = conn
cache.xmlfile = xmlfilepath
cache.sql = sql
cache.cachetime = cachetime
cache.writedatatoxml
Установить Cache = ничего
Конечная функция
'Читать кеш
Функция readcache (xmlfilepath, conn, sql, byref readon)
SET CACHE = NEW XMLCACHECLS
Установить cache.conn = conn
cache.xmlfile = xmlfilepath
cache.sql = sql
cache.readdata
Readcache = cache.sqlarr
Readon = cache.readon
Конечная функция
%>
Как использовать:
1 данные кэша в XML
Код:
Программный код
<!-#Включите файл = conn.asp->
<!-#Включите file = xml.asp->
<%
SET CACHE = NEW XMLCACHECLS
Установить cache.conn = conn
cache.xmlfile = server.mappath (xmlcache/index/top.xml)
cache.sql = выберите Top 15 prod_id, prod_name, prod_uptime из tblproduction
cache.writedatatoxml
%>
2 Читать кэшированные данные
Код:
Программный код
<!-#Включите файл = conn.asp->
<!-#Включите file = xml.asp->
<%
SET CACHE = NEW XMLCACHECLS
Установить cache.conn = conn
cache.xmlfile = server.mappath (xmlcache/index/top.xml)
cache.sql = выберите Top 15 Prod_id, prod_name, prod_uptime из порядка tblproduction от prod_id asc
cache.readdata
rsarray = cache.sqlarr
Если Isarray (rsarray), тогда
для i = 0 до ubund (rsarray, 2)
для j = 0 до ubund (rsarray, 1)
response.write (rsarray (j, i) и <br> <br>)
следующий
следующий
конец, если
%>
Время кэша по умолчанию составляет 10 минут;