-
คลาสแคช XML REM
คลาส xmlcachecls
ต้องเปิดแหล่งข้อมูล m_dataconn ส่วนตัว
cachetime ส่วนตัว m_cachetime, เริ่มต้นเป็น 10 นาทีในไม่กี่วินาที
Private M_xmlfile 'เส้นทาง XML ใช้ที่อยู่สัมบูรณ์ไม่จำเป็นต้องขยายส่วนขยาย
คำสั่ง m_sql 'private
Private M_SQLARR '(อ่านอย่างเดียว) อาร์เรย์ส่งคืนข้อมูล
Private M_Readon '(อ่านอย่างเดียว) ส่งคืนวิธีการอ่านวิธีการอ่าน 1-database 2-XML สำหรับการตรวจจับ
'แอตทริบิวต์คลาส ==================================================== ===
'แหล่งข้อมูล
ชุดทรัพย์สินสาธารณะ Conn (V)
ตั้งค่า m_dataconn = v
จุดสิ้นสุดของทรัพย์สิน
ทรัพย์สินสาธารณะรับ Conn
conn = m_dataconn
จุดสิ้นสุดของทรัพย์สิน
'เวลาแคช
ทรัพย์สินสาธารณะให้ Cachetime (V)
m_cachetime = v
จุดสิ้นสุดของทรัพย์สิน
ทรัพย์สินสาธารณะได้รับ cachetime
cachetime = m_cachetime
จุดสิ้นสุดของทรัพย์สิน
'เส้นทาง XML พร้อมที่อยู่สัมบูรณ์
ทรัพย์สินสาธารณะให้ 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
จุดสิ้นสุดของทรัพย์สิน
'การทำลายชั้นเรียน ==================================================== =========
คลาสย่อย class_initialize () 'เริ่มต้นคลาสคลาส
m_cachetime = 60*10 'เวลาแคชเริ่มต้นคือ 10 นาที
สิ้นสุดย่อย
คลาสรีลีสย่อยส่วนตัวย่อย () ()
สิ้นสุดย่อย
'วิธีการสาธารณะในชั้นเรียน ================================================= ===============
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) จากนั้นออกจากฟังก์ชัน
สิ้นสุดถ้า
สลัวอาร์เอส
สลัว 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 & <รายการ
สำหรับแต่ละฟิลด์ใน Rs.Fields
XMLCONTENT = XMLCONTENT & FIELD.NAME & = & XMLSTRINGENCODE (FIELD.VALUE) &
ต่อไป
Rs.Movenext
k = k+1
XMLCONTENT = XMLCONTENT &> </รายการ> & VBNewLine
ใช้
Rs.close
ตั้งค่า rs = ไม่มีอะไร
XMLCONTENT = XMLCONTENT & </root> & VBNewLine
สลัวโฟลเดอร์
folderPath = trim (ซ้าย (m_xmlfile, instrrev (m_xmlfile,/)-1)
Call CreateDir (FolderPath &) 'สร้างโฟลเดอร์
writestringtoxmlfile m_xmlfile, xmlcontent
ฟังก์ชันสิ้นสุด
'วิธีการส่วนตัวของคลาส ================================================= ===========
REM อ่านข้อมูลจากไฟล์ XML
ฟังก์ชั่นส่วนตัว readdataFromxml
อาร์เรย์ dim sqlarr () '
dim xmldoc 'xmldoc วัตถุ
โหนดลูกของ Dim Objnode
ความยาวความยาวของโหนดลูก
ความยาวของแอตทริบิวต์โหนดเด็กสลัว
ตั้งค่า xmldoc = server.createObject (microsoft.xmldom)
xmldoc.async = false
xmldoc.load (m_xmlfile)
ตั้งค่า objnode = xmldoc.documentElement 'รับรูทโหนด
itemsLength = objnode.childnodes.length 'รับความยาวของโหนดเด็ก
สำหรับ items_i = 0 ถึง itemitlength-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 ()
Dim K
k = 0
ตั้งค่า rs = server.createObject (adodb.recordset)
Rs.Open M_SQL, M_DATACONN, 1
ถ้าไม่ใช่ (Rs.EOF และ Rs.Bof) แล้ว
ในขณะที่ไม่ใช่ Rs.EOF
สลัว 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
ใช้
สิ้นสุดถ้า
Rs.close
ตั้งค่า rs = ไม่มีอะไร
m_sqlarr = sqlarr
ฟังก์ชันสิ้นสุด
'วิธีการส่วนตัวเสริมของคลาส ================================================= =========
Rem Writes ไฟล์ XML
คำสั่งย่อยส่วนตัว
Dim Fs, TS
ตั้งค่า fs = createObject (scripting.filesystemobject)
ถ้าไม่ใช่ isObject (fs) จากนั้นออกจาก Sub
ตั้งค่า ts = fs.opentextfile (ชื่อไฟล์ 2, true)
ts.writeline (str)
ts.close
ตั้งค่า ts = ไม่มีอะไร
ตั้งค่า fs = ไม่มีอะไร
สิ้นสุดย่อย
REM กำหนดว่าแคช XML จะหมดอายุหรือไม่
ฟังก์ชั่นส่วนตัว isxmlcacheexpired (ไฟล์, วินาที)
สลัว
filelasttime = fsogetFileLaStModifiedTime (ไฟล์)
ถ้า dateadd (s, วินาที, filelasttime) <ตอนนี้แล้ว
isxMlCacheExPired = true
อื่น
isxMlCacheExPired = FALSE
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
rem รับเวลาการแก้ไขครั้งสุดท้ายของไฟล์
ฟังก์ชั่นส่วนตัว fsogetFileLastModifiedTime (ไฟล์)
สลัว fso, f, s
ตั้งค่า fso = createObject (scripting.filesystemobject)
ตั้งค่า f = fso.getFile (ไฟล์)
fsogetFileLastModifiedTime = f.datelastModified
ตั้งค่า f = ไม่มีอะไร
ตั้งค่า fso = ไม่มีอะไร
ฟังก์ชันสิ้นสุด
ไฟล์ REM มีอยู่หรือไม่?
ฟังก์ชั่นสาธารณะ fsoexistsfile (ไฟล์)
สลัว fso
ตั้งค่า fso = server.createObject (scripting.filesystemobject)
ถ้า fso.fileexists (ไฟล์) จากนั้น
fsoexistsfile = true
อื่น
fsoExistSfile = false
สิ้นสุดถ้า
ตั้งค่า fso = ไม่มีอะไร
ฟังก์ชันสิ้นสุด
rem xml escape charents
ฟังก์ชั่นส่วนตัว XMLStringEncode (STR)
ถ้า str & = จากนั้น xmlStringEncode =: ออกจากฟังก์ชัน
str = แทนที่ (str, <, <)
str = แทนที่ (str,>,>)
str = แทนที่ (str, ', & apos;)
str = แทนที่ (str ,,)
str = แทนที่ (str, &, &)
XMLStringENCODE = STR
ฟังก์ชันสิ้นสุด
rem สร้างโฟลเดอร์
ฟังก์ชั่นส่วนตัวที่สร้างขึ้น (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
ถ้าฉัน = 0 แล้ว
pathtmp = patharr (0) & /
อื่น
pathtmp = pathtmp & patharr (i) & /
สิ้นสุดถ้า
cPath = ซ้าย (pathtmp, len (pathtmp) -1)
ถ้าไม่ใช่ fileObject.folderExists (cPath) แล้ว
'response.write cpath
fileObject.createFolder cpath
สิ้นสุดถ้า
ต่อไป
ตั้งค่า fileObject = ไม่มีอะไร
ถ้า err.number <> 0 แล้ว
createDir = false
err.lear
อื่น
createDir = true
สิ้นสุดถ้า
ฟังก์ชันสิ้นสุด
ชั้นเรียนจบ
'ตั้งค่าแคช
ฟังก์ชั่น setCache (xmlfilepath, cachetime, conn, sql)
ตั้งค่าแคช = ใหม่ xmlcachecls
ตั้งค่า cache.conn = conn
cache.xmlfile = xmlfilepath
cache.sql = sql
cache.cachetime = cachetime
cache.writedatatoxml
ตั้งค่าแคช = ไม่มีอะไร
ฟังก์ชันสิ้นสุด
'อ่านแคช
ฟังก์ชั่น readCache (XMLFilePath, Conn, SQL, Byref Readon)
ตั้งค่าแคช = ใหม่ xmlcachecls
ตั้งค่า cache.conn = conn
cache.xmlfile = xmlfilepath
cache.sql = sql
cache.readdata
readCache = cache.sqlarr
readon = cache.readon
ฟังก์ชันสิ้นสุด
-
วิธีใช้:
1 ข้อมูลแคชไปยัง XML
รหัส:
รหัสโปรแกรม
<!-#รวมไฟล์ = conn.asp->
<!-#รวมไฟล์ = xml.asp->
-
ตั้งค่าแคช = ใหม่ 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->
<!-#รวมไฟล์ = xml.asp->
-
ตั้งค่าแคช = ใหม่ 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 นาทีโดยค่าเริ่มต้นในไม่กี่วินาที;