<%
Удалить класс кэша XML
'------------------------------------------------ - ------------------
«Пожалуйста, сохраняйте информацию об авторских правах при перепечатке.
'Автор: ╰⑥月の雨╮
'Версия: ver1.0
«Этот класс частично основан на классе кэша данных walkmanxml, который более удобен в использовании. Добро пожаловать, чтобы общаться и добиваться прогресса.
'------------------------------------------------ - ------------------
Класс XmlCacheCls
Private m_DataConn 'Источник данных должен быть открыт
Private m_CacheTime 'Время кэширования в секундах, по умолчанию 10 минут.
Частный xml-путь m_XmlFile, используйте абсолютный адрес, расширение не требуется.
Частный оператор SQL m_Sql '
Private m_SQLArr '(только для чтения) возвращаемый массив данных
Private m_ReadOn '(Только чтение) Возвращает
свойства режима чтения 1-база данных 2-xml для обнаружения ========================= ==============
'Источник данных
Набор общедоступных свойств Conn(v)
Установите m_DataConn = v
Конечная собственность
Общественная собственность Get Conn
Конн = m_DataConn
End Property
'Время кэширования
Открытая собственность Let CacheTime(v)
m_CacheTime = v
Конечная собственность
Открытая собственность Получить CacheTime
CacheTime = m_CacheTime
к конечному свойству
, используйте абсолютный адрес
Открытая собственность Let XmlFile(v)
m_XmlFile = v
Конечная собственность
Открытая собственность GetXmlFile
XmlFile = m_XmlFile
Оператор SQL
End Property
Открытая собственность Let Sql(v)
m_Sql = v
Конечная собственность
Публичная собственность Получить Sql
SQL = m_Sql
Конечная собственность
'Возвращаем массив записей
Открытая собственность: получение SQLArr
SQLArr = m_SQLArr
End Property
'Возврат в режим чтения
Общественная собственность. Читать дальше
ReadOn = m_ReadOn
End Property
'Уничтожение класса ========================================
Private Sub Class_Initialize() 'Инициализируем класс
m_CacheTime=60*10 'Время кэширования по умолчанию составляет 10 минут.
End Sub
Private Sub Class_Terminate() 'Освободить класс
End Sub
'Открытый метод класса =============================== ========
Rem считывает данные
Открытая функция ReadData
If FSOExistsFile(m_XmlFile) Тогда 'Xml-кэш существует, читайте непосредственно из xml
Чтениедатафромксмл
m_ReadOn=2
Еще
Чтение данных из базы данных
m_ReadOn=1
Конец, если
Конечная функция
Rem записывает данные XML
Открытая функция WriteDataToXml
If FSOExistsFile(m_XmlFile) then 'Выйти напрямую, если срок действия xml не истек
Если нет isXmlCacheExpired(m_XmlFile,m_CacheTime), то выйдите из функции
Конец, если
Димры
Dimxmlконтент
Дим к
xmlcontent = ""
xmlcontent = xmlcontent & "<?xml version=""1.0""coding=""gb2312""?>" & vbnewline
xmlcontent = xmlcontent & «<root>» & vbnewline
к=0
Установите Rs = Server.CreateObject("Adodb.Recordset")
Rs.open m_sql,m_DataConn,1
Пока не rs.eof
xmlcontent = xmlcontent & «<элемент»
Для каждого поля в rs.Fields
xmlcontent = xmlcontent & field.name & "=""" & XMLStringEnCode(field.value) & """ "
Следующий
rs.movenext
к=к+1
xmlcontent = xmlcontent & "></item>" & vbnewline
Венд
RS.закрыть
Setrs=Ничего
xmlcontent = xmlcontent & " </root>" & vbnewline
Путь к папке Dim
путь к папке = Trim(left(m_XmlFile,InstrRev(m_XmlFile,"")-1))
Вызов CreateDIR(folderpath&"") 'Создать папку
WriteStringToXMLFile m_XmlFile, xmlcontent
Конечная функция
'Частный метод класса=========================================
Rem из данных чтения XML-файла
Частная функция ReadDataFromXml
Dim SQLARR() 'Массив
Dim XmlDoc 'Объект XmlDoc
Dim objNode 'дочерний узел
Dim ItemsLength 'Длина дочернего узла
Dim AttributesLength 'Длина атрибутов дочернего узла
Set XmlDoc=Server.CreateObject("Microsoft.XMLDOM")
XmlDoc.Async=False
XmlDoc.Load(m_XmlFile)
Set objNode=XmlDoc.documentElement 'Получить корневой узел
ItemsLength=objNode.ChildNodes.length 'Получить длину дочерних узлов
Для items_i=0 Для ItemsLength-1
AttributesLength=objNode.childNodes(items_i).Attributes.length 'Получить длину атрибутов дочернего узла
Для Attributes_i=0 Для AttributesLength-1
ReDim Preserve SQLARR (AttributesLength-1,items_i)
SQLArr(Attributes_i,items_i) = objNode.childNodes(items_i).Attributes(Attributes_i).Nodevalue
Следующий
Следующий
Установить XmlDoc = Ничего
m_SQLArr = SQLARR
Конечная функция
Rem считывает данные из базы данных
Частная функция ReadDataFromDB
Димры
ДимSQLARR()
Дим к
к=0
Установите Rs = Server.CreateObject("Adodb.Recordset")
Rs.open m_sql,m_DataConn,1
Если нет (rs.eof и rs.bof), то
Пока не rs.eof
Тусклое поле
fieldlegth = rs.Fields.count
ReDim Preserve SQLARR(fieldlegth,k)
Дим Филди
Для fieldi = 0 Для fieldlegth-1
SQLArr(fieldi,k) = rs.Fields(fieldi).value
Следующий
rs.movenext
к=к+1
Венд
Конец, если
RS.закрыть
Setrs=Ничего
m_SQLArr = SQLArr
Конечная функция
'Вспомогательный частный метод класса======================================= ==
Rem Записать XML-файл
Частная подпрограмма WriteStringToXMLFile(имя файла,str)
Дим фс,тс
Set fs= createobject("scripting.filesystemobject")
Если не IsObject(fs), то выйдите из Sub
Установите ts=fs.OpenTextFile(имя файла,2,True)
ts.writeline(стр)
ц.закрыть
Установите ts=Ничего
Установить fs=Ничего
End Sub
Rem определяет, истек ли срок действия XML-кеша
Частная функция isXmlCacheExpired (файл, секунды)
Тусклый файл в последний раз
filelasttime = FSOGetFileLastModifiedTime(файл)
Если DateAdd("s",секунды,filelasttime) < Сейчас Тогда
isXmlCacheExpired = Истина
Еще
isXmlCacheExpired = ложь
Конец, если
Конечная функция
Rem получает время последнего изменения файла.
Частная функция FSOGetFileLastModifiedTime(файл)
Тусклый fso,f,s
Set fso=CreateObject("Scripting.FileSystemObject")
Установите f=fso.GetFile(файл)
FSOGetFileLastModifiedTime = f.DateLastModified
Установить f = Ничего
Установить fso = Ничего
End Function
Rem?
Открытая функция FSOExistsFile(файл)
Тусклый фсо
Установите fso = Server.CreateObject("Scripting.FileSystemObject")
Если fso.FileExists(файл) Тогда
ФСОексистсфиле = истина
Еще
ФСОексистсфиле = ложь
Конец, если
Установить fso = ничего
Конечная функция
Rem escape-символ xml
Частная функция XMLStringEnCode(str)
Если str&"" = "" Тогда XMLStringEnCode="":Выход из функции
стр = Заменить(строка,"<","<")
str = Заменить(str,">",">")
str = Заменить(str,"'","'")
str = Заменить(str,"""",""")
ул = Заменить(стр,"&","&")
XMLStringEnCode = строка
Конечная функция
Rem Создать папку
Частная функция CreateDIR (byval LocalPath)
При ошибке Возобновить Далее
Dim i, FileObject, pathharr, path_level, pathtmp, cpath
LocalPath = Заменить(LocalPath,"","/")
Установите FileObject = server.createobject("Scripting.FileSystemObject")
patharr = Split(LocalPath,"/")
path_level = UBound(patharr)
Для i = 0 до path_level
Если я=0 Тогда
pathtmp=patharr(0) & "/"
Еще
pathtmp = pathtmp & patharr(i) & "/"
Конец, если
cpath = left(pathtmp,len(pathtmp)-1)
Если не FileObject.FolderExists(cpath), Тогда
'Response.write cpath
FileObject.CreateFolder cpath
Конец, если
Следующий
Установить FileObject = Ничего
Если номер ошибки<>0 Тогда
СоздатьКАТАЛ = Ложь
Ошиб.Очистить
Еще
СоздатьКАТАЛ = Истина
Конец, если
Конечная функция
Конечный класс
'Установить кеш
Функция SetCache(xmlFilePath,CacheTime,Conn,Sql)
установить кэш = новый XmlCacheCls
Установить кэш.Conn=Conn
кэш.XmlFile=xmlFilePath
кэш.Sql=Sql
кэш.CacheTime=Время кэширования
кэш.WriteDataToXml
Установить кеш = Ничего
Конечная функция
'Читать кэш
Функция ReadCache(xmlFilePath,Conn,Sql,ByRef ReadOn)
установить кэш = новый XmlCacheCls
Установить кэш.Conn=conn
кэш.XmlFile=xmlFilePath
кэш.Sql=Sql
кэш.ReadData
ReadCache=cache.SQLArr
ReadOn=cache.ReadOn
Конечная функция
%>
Использование:
1 кэширование данных в xml.
код:
код программы
<!--#include file="Conn.asp"-->
<!--#include file="Xml.asp"-->
<%
установить кэш = новый XmlCacheCls
Установить кэш.Conn=conn
кэш.XmlFile=Server.Mappath("xmlcache/index/Top.xml")
кэш.Sql="выберите 15 лучших prod_id,prod_name,prod_uptime из tblProduction"
кэш.WriteDataToXml
%>
2 Код для чтения кэшированных данных
:
программный код
<!--#include file="Conn.asp"-->
<!--#include file="Xml.asp"-->
<%
установить кэш = новый XmlCacheCls
Установить кэш.Conn=conn
кэш.XmlFile=Server.Mappath("xmlcache/index/Top.xml")
кэш.Sql="выберите 15 лучших prod_id,prod_name,prod_uptime из таблицыПроизводственный порядок по prod_id asc"
кэш.ReadData
rsArray=cache.SQLArr
если isArray(rsArray), то
для i=0 до ubound(rsArray,2)
от j=0 до ubound(rsArray,1)
response.Write(rsArray(j,i)&"<br><br>")
следующий
следующий
конец, если
%>
Время кэширования, единица измерения по умолчанию — 10 минут в секундах. Вы также можете установить кэш.CacheTime=60*30 30 минут самостоятельно;