<%
REM XMLキャッシュクラス
クラスXMLCACHECLS
Private M_Dataconnのデータソースを開く必要があります
Private M_Cachetime 'Cachetime、デフォルトで10分間になります
PrivateM_XmlFile 'XMLパス、絶対アドレスを使用し、拡張機能は必要ありません
プライベートM_SQLのSQLステートメント
Private M_SQLARR '(読み取り専用)データアレイを返します
PrivateM_Readon '(読み取り専用)検出のために読書方法1-Database2-XMLを返します
'クラス属性========================================================= ===
'データソース
公共財産セットconn(v)
M_DATACONN = Vを設定します
プロパティを終了します
公共財産はconnを取得します
conn = m_dataconn
プロパティを終了します
'キャッシュ時間
公共財産はcachetime(v)を許可します
m_cachetime = v
プロパティを終了します
公共財産はキャッシュタイムを取得します
cachetime = m_cachetime
プロパティを終了します
'XMLパス、絶対アドレス付き
公共財産Xmlfile(v)
m_xmlfile = v
プロパティを終了します
公共財産はxmlfileを取得します
xmlfile = m_xmlfile
プロパティを終了します
'SQLステートメント
公共財産let 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分です
End Sub
private sub class_terminate() 'リリースクラス
End Sub
「クラスのパブリック方法============================================================ ==============
REM読み取りデータ
パブリック関数readdata
fsoexistsfile(m_xmlfile)の場合、XMLキャッシュがあり、XMLから直接読み取ります
readdatafromxml
m_readon = 2
それ以外
readdatafromdb
m_readon = 1
ifを終了します
エンド関数
remはXMLデータを書き込みます
パブリック関数writedatatoxml
fsoexistsfile(m_xmlfile)の場合、xmlが有効期限が切れていない場合は、直接終了します
ISXMLCACHEEXPIRED(M_XMLFILE、M_CACHETIME)でない場合は、機能を終了します
ifを終了します
薄暗いrs
dim xmlcontent
Dim k
xmlcontent =
xmlcontent = xmlcontent&<?xmlバージョン= 1.0エンコード= gb2312?>&vbnewline
xmlcontent = xmlcontent&<root>&vbnewline
k = 0
rs = server.createObject(adodb.Recordset)を設定します
rs.open m_sql、m_dataconn、1
rs.eofではありませんが
xmlcontent = xmlcontent&<item
Rs.Fieldsの各フィールド
xmlcontent = xmlcontent&field.name&=&xmlstringencode(field.value)&
次
rs.movenext
k = k+1
xmlcontent = xmlcontent&> </item>&vbnewline
ウェンド
rs.close
rs = Nothingを設定します
xmlcontent = xmlcontent&</root>&vbnewline
Dim FolderPath
folderpath = trim(左(m_xmlfile、instrrev(m_xmlfile、/)-1)))
calletir(folderpath&) 'フォルダーを作成します
writestringtoxmlfile m_xmlfile、xmlcontent
エンド関数
'クラスのプライベート方法=========================================== ============
rem xmlファイルからデータを読み取ります
プライベート関数readDataFromXml
dim sqlarr() '配列
dim xmldoc 'xmldocオブジェクト
dim objnode 'チャイルドノード
Dim Itemslength '子ノードの長さ
dim attributeslength '子ノード属性の長さ
xmldoc = server.createobject(microsoft.xmldom)を設定します
xmldoc.async = false
xmldoc.load(m_xmlfile)
objnode = xmldoc.documentlement 'get rootノードを設定します
itemslength = objnode.childnodes.length '子ノードの長さを取得します
items_i = 0の項目Length-1の場合
attributesLength = objnode.childnodes(items_i).attributes.length 'child node属性の長さを取得します
Attributes_i = 0の場合、attributeslength-1
Redim Preserve SQLARR(aTtributesLength-1、items_i)
sqlarr(astributes_i、items_i)= objnode.childnodes(items_i).attributes(attributes_i).nodevalue
次
次
xmldoc = Nothingを設定します
M_SQLARR = SQLARR
エンド関数
データベースからデータを読み取ります
プライベート関数readDataFromDB
薄暗いrs
dim sqlarr()
Dim k
k = 0
rs = server.createObject(adodb.Recordset)を設定します
rs.open m_sql、m_dataconn、1
そうでない場合(rs.eofおよびrs.bof)
rs.eofではありませんが
Dim Fieldlegth
fieldlegth = rs.fields.count
Redim Preserve SQLARR(FieldLegth、K)
Dim Fieldi
fielddi = 0からfieldlegth-1の場合
sqlarr(fieldi、k)= rs.fields(fieldi).value
次
rs.movenext
k = k+1
ウェンド
ifを終了します
rs.close
rs = Nothingを設定します
M_SQLARR = SQLARR
エンド関数
'クラスの補助私的方法======================================================================== =========
remはXMLファイルを書き込みます
private sub writestringtoxmlfile(filename、str)
dim fs、ts
fs = createObject(scripting.filesystemObject)を設定します
ISObject(fs)ではない場合は、subを終了します
set ts = fs.opentextfile(filename、2、true)
Ts.WriteLine(str)
ts.close
ts =何も設定しません
fs = Nothingを設定します
End Sub
REMは、XMLキャッシュが期限切れになるかどうかを判断します
プライベート機能isxmlcacheexpired(ファイル、秒)
Dim Filelasttime
filelasttime = fsogetfilelastModifiedTime(file)
Dateadd(s、秒、filelasttime)の場合<今
isxmlcacheexpired = true
それ以外
isxmlcacheexpired = false
ifを終了します
エンド関数
remファイルの最後の変更時間を取得します
プライベート機能fsogetfilelastModifiedtime(file)
dim fso、f、s
fso = createObject(scripting.filesystemObject)をset
f = fso.getfile(file)を設定します
FSOGETFILELASTMODIFIEDTIME = F.DATELASTMODIFIED
f =何も設定しません
FSO =何も設定しません
エンド関数
REMファイルは存在しますか?
パブリック関数fsoexistfile(file)
薄暗いfso
fso = server.createObject(scripting.filesystemObject)を設定します
FSO.FILEEEXISTS(ファイル)の場合
fsoexistsfile = true
それ以外
fsoexistsfile = false
ifを終了します
FSO =何も設定しません
エンド関数
REM XMLエスケープ文字
プライベート関数xmlstringencode(str)
str&= then xmlstringencode =:exit関数の場合
str =置換(str、<、<)
str =置換(str、>、>)
str =置換(str、 '、&apos;)
str =置換(str ,,)
str =置換(str、&、&&)
xmlstringencode = str
エンド関数
REM CREATEフォルダー
プライベート機能createdir(byval localpath)
エラーの再開時に次に再開します
dim i、fileobject、patharr、path_level、pathtmp、cpath
localpath =置換(localpath、/、/)
fileObject = server.createObject(scripting.filesystemObject)を設定します
patharr = split(localpath、/)
path_level = ubound(patharr)
i = 0からpath_levelへ
i = 0の場合
pathtmp = patharr(0)& /
それ以外
pathtmp = pathtmp&patharr(i)& /
ifを終了します
cpath = left(pathtmp、len(pathtmp)-1)
fileobject.folderexists(cpath)ではない場合
'Response.Write CPath
fileObject.createfolder cpath
ifを終了します
次
FileObject = Nothingを設定します
err.number <> 0の場合
createdir = false
err.clear
それ以外
createdir = true
ifを終了します
エンド関数
エンドクラス
'キャッシュを設定します
function setcache(xmlfilepath、cachetime、conn、sql)
Cache = new XmlCacheClsを設定します
cache.conn = connを設定します
cache.xmlfile = xmlfilepath
cache.sql = sql
cache.cachetime = cachetime
cache.writedatatoxml
セットキャッシュ=なし
エンド関数
'キャッシュを読んでください
関数readcache(xmlfilepath、conn、sql、byref readon)
Cache = new XmlCacheClsを設定します
cache.conn = connを設定します
cache.xmlfile = xmlfilepath
cache.sql = sql
cache.readdata
readcache = cache.sqlarr
readon = cache.readon
エンド関数
%>
使い方:
XMLにデータをキャッシュします
コード:
プログラムコード
<! - #include file = conn.asp->
<! - #file = xml.aspを含める - >
<%
Cache = new XmlCacheClsを設定します
cache.conn = connを設定します
cache.xmlfile = server.mappath(xmlcache/index/top.xml)
cache.sql = tblproductionから上位15 prod_id、prod_name、prod_uptimeを選択します
cache.writedatatoxml
%>
2キャッシュされたデータを読みます
コード:
プログラムコード
<! - #include file = conn.asp->
<! - #file = xml.aspを含める - >
<%
Cache = new XmlCacheClsを設定します
cache.conn = connを設定します
cache.xmlfile = server.mappath(xmlcache/index/top.xml)
cache.sql = declod_id ascによるtblproduction orderから上位15 dod_id、prod_name、prod_uptimeを選択
cache.readdata
rsarray = cache.sqlarr
ISARRAY(rsarray)の場合
i = 0からUbund(rsarray、2)
j = 0からubund(rsarray、1)
respons.write(rsarray(j、i)&<br> <br>)
次
次
ifを終了します
%>
キャッシュ時間はデフォルトで数秒で10分です