<%
فئة ذاكرة التخزين المؤقت XML
'------------------------------------------------ - ------------------
"يُرجى الاحتفاظ بمعلومات حقوق الطبع والنشر عند إعادة الطباعة
'المؤلف: ╰⑥月の雨╮
"الإصدار: الإصدار 1.0
'تعتمد هذه الفئة جزئيًا على فئة ذاكرة التخزين المؤقت لبيانات walkmanxml، وهي أكثر ملاءمة للاستخدام.
'------------------------------------------------ - ------------------
فئة XmlCacheCls
يجب أن يكون مصدر بيانات m_DataConn الخاص مفتوحًا
m_CacheTime الخاص 'وقت ذاكرة التخزين المؤقت، بالثواني، الافتراضي هو 10 دقائق
مسار xml الخاص بـ m_XmlFile، استخدم العنوان المطلق، ولا يلزم وجود ملحق
بيان SQL m_Sql الخاص
تم إرجاع صفيف البيانات الخاص m_SQLArr '(للقراءة فقط).
خاص m_ReadOn '(للقراءة فقط) يُرجع
خصائص وضع القراءة 1-قاعدة البيانات 2-xml للكشف ============================= ==============
مصدر البيانات
مجموعة الملكية العامة Conn(v)
قم بتعيين m_DataConn = v
نهاية الملكية
الملكية العامة احصل على كون
كون = m_DataConn
نهاية الخاصية
'وقت ذاكرة التخزين المؤقت
الملكية العامة تسمح لـ CacheTime(v)
m_CacheTime = v
نهاية الملكية
الملكية العامة احصل على CacheTime
CacheTime = m_CacheTime
مسار XML
لخاصية النهاية
، استخدم العنوان المطلق
السماح للملكية العامة بـ XmlFile(v)
m_XmlFile = v
نهاية الملكية
الملكية العامة GetXmlFile
XmlFile = m_XmlFile
نهاية الخاصية
'بيان Sql
الملكية العامة دع Sql (v)
m_Sql = v
نهاية الملكية
الملكية العامة احصل على Sql
SQL = m_Sql
نهاية الملكية
'إرجاع مصفوفة السجلات
الملكية العامة احصل على SQLArr
SQLArr = m_SQLArr
خاصية النهاية
"العودة إلى وضع القراءة".
الملكية العامة احصل على القراءة
ReadOn = m_ReadOn
خاصية النهاية
'تدمير الفئة
======================================================================= Class_Initialize() 'تهيئة الفئة
m_CacheTime=60*10 'وقت التخزين المؤقت الافتراضي هو 10 دقائق
End Sub
Private Sub Class_Terminate() 'إصدار الفئة
End Sub
' الطريقة العامة للفئة ============================ ========
ريم يقرأ البيانات
وظيفة عامة قراءة البيانات
إذا كان FSOExistsFile(m_XmlFile) موجودًا، فاقرأ مباشرة من ملف XML
قراءة البيانات منXml
m_ReadOn=2
آخر
قراءة البيانات من قاعدة البيانات
m_ReadOn=1
نهاية إذا
وظيفة النهاية
Rem تكتب بيانات XML
الوظيفة العامة WriteDataToXml
إذا كان FSOExistsFile(m_XmlFile) ثم "الخروج مباشرة إذا لم تنته صلاحية XML."
إذا لم يكن XmlCacheExpired(m_XmlFile,m_CacheTime) ثم اخرج من الوظيفة
نهاية إذا
خافتات
Dimxmlcontent
خافت ك
محتوى xml = ""
xmlcontent = xmlcontent & "<?xml version=""1.0"" encoding=""gb2312""?>" & vbnewline
xmlcontent = xmlcontent & "<root>" & vbnewline
ك = 0
تعيين Rs = Server.CreateObject("Adodb.Recordset")
Rs.open m_sql,m_DataConn,1
بينما لا rs.eof
xmlcontent = xmlcontent & "<item"
لكل حقل في حقول rs
xmlcontent = xmlcontent & field.name & "=""" & XMLStringEnCode(field.value) & """ "
التالي
rs.movenext
ك=ك+1
xmlcontent = xmlcontent & "></item>" & vbnewline
ويند
rs. Close
سيترز = لا شيء
xmlcontent = xmlcontent & " </root>" & vbnewline
Dim Folderpath
مسار المجلد = Trim(left(m_XmlFile,InstrRev(m_XmlFile,"")-1))
اتصل بـ CreateDIR(folderpath&"") "إنشاء مجلد".
WriteStringToXMLFile m_XmlFile,xmlcontent
وظيفة النهاية
"طريقة خاصة للفئة ===============================
Rem من ملف Xml لقراءة البيانات
وظيفة خاصة ReadDataFromXml
خافت SQLARR () "صفيف
خافت XmlDoc 'كائن XmlDoc
خافت objNode 'العقدة الفرعية
Dim ItemsLength 'طول العقدة الفرعية
Dim AttributesLength 'طول سمات العقدة الفرعية
تعيين XmlDoc=Server.CreateObject("Microsoft.XMLDOM")
XmlDoc.Async=خطأ
XmlDoc.Load(m_XmlFile)
قم بتعيين 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 الحفاظ على SQLARR(AttributesLength-1,items_i)
SQLArr(Attributes_i,items_i) = objNode.childNodes(items_i).Attributes(Attributes_i).قيمة العقدة
التالي
التالي
تعيين 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 الحفاظ على SQLARR(fieldlegth,k)
خافت الميداني
من أجل fieldi = 0 إلى fieldlegth-1
SQLArr(fieldi,k) = rs.Fields(fieldi).value
التالي
rs.movenext
ك=ك+1
ويند
نهاية إذا
rs. Close
سيترز = لا شيء
m_SQLArr = SQLArr
وظيفة النهاية
"الطريقة الخاصة المساعدة للفئة ======================= ==
Rem Write ملف XML
WriteStringToXMLFile الفرعي الخاص (اسم الملف، شارع)
خافت خ، تيسي
تعيين fs= createobject("scripting.filesystemobject")
إذا لم يكن IsObject(fs) ثم قم بالخروج من Sub
تعيين ts=fs.OpenTextFile(filename,2,True)
ts.writeline(شارع)
ts.إغلاق
تعيين نهاية الخبر = لا شيء
تعيين خ = لا شيء
End Sub
Rem ما إذا كانت ذاكرة التخزين المؤقت لـ XML قد انتهت صلاحيتها
الوظيفة الخاصة هيXmlCacheExpired(ملف، ثواني)
ملف خافت في المرة الأخيرة
filelasttime = FSOGetFileLastModifiedTime(ملف)
إذا كان DateAdd("s"، ثواني، filelasttime) < الآن ثم
isXmlCacheExpired = True
آخر
isXmlCacheExpired = خطأ
نهاية إذا
وظيفة النهاية
Rem تحصل على آخر وقت تعديل للملف
وظيفة خاصة FSOGetFileLastModifiedTime(ملف)
خافت fso، f، s
تعيين fso=CreateObject("Scripting.FileSystemObject")
تعيين f=fso.GetFile(ملف)
FSOGetFileLastModifiedTime = f.DateLastModified
تعيين و = لا شيء
تعيين fso = لا شيء
End Function
Rem؟
الوظيفة العامة FSOExistsFile (ملف)
خافت FSO
تعيين fso = Server.CreateObject("Scripting.FileSystemObject")
إذا كان fso.FileExists (ملف) إذن
FSOExistsFile = true
آخر
FSOExistsFile = false
نهاية إذا
تعيين fso = لا شيء
نهاية الدالة
Rem حرف الهروب xml
الوظيفة الخاصة XMLStringEnCode(str)
إذا كانت str&"" = "" ثم XMLStringEnCode = "": قم بالخروج من الوظيفة
str = استبدال(str،"<"،<")
str = استبدال(str،">"،>")
str = استبدال(str،"'"،"&apos؛")
str = استبدال(str،""""،"")
str = استبدال(str،"&"،&")
XMLStringEnCode = str
وظيفة النهاية
Rem إنشاء مجلد
وظيفة خاصة CreateDIR (byval LocalPath)
على خطأ استئناف التالي
Dim i,FileObject,patharr,path_level,pathtmp,cpath
LocalPath = استبدال (LocalPath، ""، "/")
تعيين FileObject = server.createobject("Scripting.FileSystemObject")
Patharr = سبليت (LocalPath، "/")
path_level = UBound(patharr)
لأني = 0 إلى مستوى المسار
إذا كنت = 0 ثم
pathtmp=patharr(0) & "/"
آخر
pathtmp = pathtmp & patharr(i) & "/"
نهاية إذا
cpath = اليسار (pathtmp، لين (pathtmp) -1)
إذا لم يكن FileObject.FolderExists(cpath) ثم
'الاستجابة. اكتب cpath
FileObject.CreateFolder cpath
نهاية إذا
التالي
تعيين FileObject = لا شيء
إذا err.number<>0 ثم
CreateDIR = خطأ
خطأ. واضح
آخر
CreateDIR = صحيح
نهاية إذا
وظيفة النهاية
نهاية الفصل
"تعيين ذاكرة التخزين المؤقت."
وظيفة SetCache (xmlFilePath،CacheTime،Conn،Sql)
تعيين ذاكرة التخزين المؤقت = XmlCacheCls الجديد
تعيين ذاكرة التخزين المؤقت.Conn=Conn
Cache.XmlFile=xmlFilePath
Cache.Sql=Sql
Cache.CacheTime=CacheTime
ذاكرة التخزين المؤقت.WriteDataToXml
تعيين ذاكرة التخزين المؤقت = لا شيء
وظيفة النهاية
'اقرأ ذاكرة التخزين المؤقت
وظيفة ReadCache (xmlFilePath،Conn،Sql،ByRef ReadOn)
تعيين ذاكرة التخزين المؤقت = XmlCacheCls الجديد
تعيين ذاكرة التخزين المؤقت.Conn=conn
Cache.XmlFile=xmlFilePath
Cache.Sql=Sql
ذاكرة التخزين المؤقت. قراءة البيانات
ReadCache=cache.SQLArr
ReadOn=cache.ReadOn
وظيفة النهاية
%>
الاستخدام:
1 بيانات مخبأة إلى XML
الكود:
كود البرنامج
<!--#include file="Conn.asp"-->
<!--#include file="Xml.asp"-->
<%
تعيين ذاكرة التخزين المؤقت = XmlCacheCls الجديد
تعيين ذاكرة التخزين المؤقت.Conn=conn
Cache.XmlFile=Server.Mappath("xmlcache/index/Top.xml")
Cache.Sql = "اختر أفضل 15 منتجًا من معرف المنتج واسم المنتج ووقت الإنتاج من tblProduction"
ذاكرة التخزين المؤقت.WriteDataToXml
%>
2 كود لقراءة البيانات المخزنة مؤقتا
:
رمز البرنامج
<!--#include file="Conn.asp"-->
<!--#include file="Xml.asp"-->
<%
تعيين ذاكرة التخزين المؤقت = XmlCacheCls الجديد
تعيين ذاكرة التخزين المؤقت.Conn=conn
Cache.XmlFile=Server.Mappath("xmlcache/index/Top.xml")
Cache.Sql = "اختر أفضل 15 منتجًا من نوع prod_id وprod_name وprod_uptime من ترتيب tblProduction بواسطة prod_id asc"
ذاكرة التخزين المؤقت. قراءة البيانات
rsArray=cache.SQLArr
إذا كان isArray(rsArray) إذن
لأني=0 إلى ubound(rsArray,2)
لـ j=0 إلى ubound(rsArray,1)
Response.Write(rsArray(j,i)&"<br><br>")
التالي
التالي
نهاية إذا
%>
وقت ذاكرة التخزين المؤقت، الوحدة الافتراضية هي 10 دقائق بالثواني؛ يمكنك أيضًا تعيين ذاكرة التخزين المؤقت.CacheTime=60*30 30 دقيقة بنفسك