<%
Rem XML 캐시 클래스
'------------------------------------------------ - ------------------
'재인쇄 시 저작권 정보를 유지해주세요.
'저자 : ╰⑥月の雨╮
'버전: ver1.0
'이 클래스는 사용하기 더 편리한 walkmanxml 데이터 캐시 클래스를 부분적으로 사용합니다. 환영합니다.
'------------------------------------------------ - ------------------
클래스 XmlCacheCls
Private m_DataConn '데이터 소스가 열려 있어야 합니다.
Private m_CacheTime '캐시 시간(초), 기본값은 10분입니다.
Private m_XmlFile 'xml 경로, 절대 주소 사용, 확장자 필요 없음
비공개 m_Sql 'SQL 문
Private m_SQLArr '(읽기 전용) 반환된 데이터 배열
Private m_ReadOn '(읽기 전용)
탐지를 위한 읽기 모드 1-데이터베이스 2-xml의 속성을 반환합니다 ============================ ===============
'데이터 소스
공용 속성 집합 Conn(v)
m_DataConn = v로 설정
끝 속성
공공 재산 Get Conn
Conn = m_DataConn
끝 속성
'캐시 시간
공용 속성 Let CacheTime(v)
m_CacheTime = v
끝 속성
공용 속성 CacheTime 가져오기
캐시타임 = m_CacheTime
End Property
'xml 경로, 절대 주소 사용
공용 속성 Let XmlFile(v)
m_Xml파일 = v
끝 속성
공용 속성 GetXmlFile
XmlFile = m_XmlFile
끝 속성
'SQL 문
공공 재산 Let Sql(v)
m_Sql = v
끝 속성
공공 재산 SQL 가져오기
SQL = m_Sql
끝 속성
'반환 레코드 배열
공용 속성 SQLArr 가져오기
SQLArr = m_SQLArr
끝 속성
'읽기 모드로 돌아가기
공용 속성 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) Then 'Xml 캐시가 존재하는 경우 xml에서 직접 읽습니다.
ReadDataFromXml
m_ReadOn=2
또 다른
DB에서 데이터 읽기
m_ReadOn=1
종료 조건
End Function
Rem은 XML 데이터를 씁니다.
공용 함수 WriteDataToXml
If FSOExistsFile(m_XmlFile) Then 'xml이 만료되지 않은 경우 직접 종료합니다.
isXmlCacheExpired(m_XmlFile,m_CacheTime)가 아닌 경우 함수 종료
종료 조건
딤머
Dimxml콘텐츠
희미한 k
xmlcontent = ""
xmlcontent = xmlcontent & "<?xml version=""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 & "></item>" & vbnewline
향하게 하다
RS.닫기
설정자=아무것도 없음
xmlcontent = xmlcontent & " </root>" & vbnewline
Dim 폴더 경로
폴더 경로 = Trim(왼쪽(m_XmlFile,InstrRev(m_XmlFile,"")-1))
CreateDIR(folderpath&"") '폴더 생성'을 호출합니다.
WriteStringToXMLFile m_XmlFile,xmlcontent
End Function
'클래스의 프라이빗 메서드==========================================
XML 파일 읽기 데이터의 Rem
개인 함수 ReadDataFromXml
희미한 SQLARR() '배열
Dim XmlDoc 'XmlDoc 개체
Dim objNode '자식 노드
Dim ItemsLength '자식 노드의 길이
Dim AttributesLength '하위 노드 속성의 길이
XmlDoc=Server.CreateObject("Microsoft.XMLDOM") 설정
XmlDoc.Async=거짓
XmlDoc.Load(m_Xml파일)
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 보존 SQLARR(AttributesLength-1,items_i)
SQLArr(Attributes_i,items_i) = objNode.childNodes(items_i).Attributes(Attributes_i).Nodevalue
다음
다음
XmlDoc = 없음으로 설정
m_SQLArr = SQLARR
End Function
Rem은 데이터베이스에서 데이터를 읽습니다.
개인 함수 ReadDataFromDB
딤머
DimSQLARR()
희미한 k
k=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(필드i,k) = rs.Fields(필드i).값
다음
rs.movenext
k=k+1
향하게 하다
종료 조건
RS.닫기
설정자=아무것도 없음
m_SQLArr = SQLArr
End Function
'클래스의 보조 전용 메서드========================================= ==
Rem xml 파일 쓰기
개인 하위 WriteStringToXMLFile(파일 이름,str)
희미한 fs,ts
fs= createobject("scripting.filesystemobject") 설정
IsObject(fs)가 아니면 Sub를 종료합니다.
ts=fs.OpenTextFile(파일 이름,2,True) 설정
ts.writeline(str)
ts.닫기
ts=아무것도 설정하지 않음
fs=아무것도 설정하지 않음
End Sub
Rem은 XML 캐시가 만료되었는지 여부를 확인합니다.
비공개 함수 isXmlCacheExpired(파일,초)
지난번에 희미한 파일
filelasttime = FSOGetFileLastModifiedTime(파일)
If DateAdd("s",seconds,filelasttime) < Now Then
isXmlCacheExpired = 참
또 다른
isXmlCacheExpired = 거짓
종료 조건
End Function
Rem은 파일의 마지막 수정 시간을 가져옵니다.
개인 함수 FSOGetFileLastModifiedTime(파일)
흐릿한 fso,f,s
fso=CreateObject("Scripting.FileSystemObject")를 설정합니다.
f=fso.GetFile(파일) 설정
FSOGetFileLastModifiedTime = f.DateLastModified
f = 없음으로 설정
fso = 없음 설정
End Function
Rem 파일이 존재하나요?
공용 함수 FSOExistsFile(파일)
희미한 fso
fso = Server.CreateObject("Scripting.FileSystemObject") 설정
fso.FileExists(file)인 경우 다음
FSOExistsFile = true
또 다른
FSOExistsFile = 거짓
종료 조건
fso = 아무것도 설정하지 않음
종료 기능
Rem xml 이스케이프 문자
개인 함수 XMLStringEnCode(str)
str&"" = ""인 경우 XMLStringEnCode="":Exit 함수
str = 바꾸기(str,"<","<")
str = 바꾸기(str,">",">")
str = 바꾸기(str,"'","'")
str = 바꾸기(str,"""",""")
str = 바꾸기(str,"&","&")
XMLStringEnCode = 문자열
종료 기능
Rem 폴더 생성
개인 함수 CreateDIR(byval LocalPath)
오류 발생 시 다음 재개
Dim i,FileObject,patharr,path_level,pathtmp,cpath
LocalPath = 바꾸기(LocalPath,"","/")
FileObject = server.createobject("Scripting.FileSystemObject") 설정
patharr = 분할(로컬 경로,"/")
path_level = UBound(patharr)
i = 0의 경우 path_level로
i=0이면
pathtmp=patharr(0) & "/"
또 다른
pathtmp = pathtmp & patharr(i) & "/"
종료 조건
cpath = 왼쪽(경로tmp,len(경로tmp)-1)
FileObject.FolderExists(cpath)가 아닌 경우
'Response.write cpath
FileObject.CreateFolder cpath
종료 조건
다음
FileObject = 없음 설정
err.number<>0이면
CreateDIR = 거짓
오류가 발생했습니다.지우기
또 다른
CreateDIR = 참
종료 조건
기능 종료
수업 종료
'캐시 설정
함수 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
캐시.읽기데이터
ReadCache=cache.SQLArr
ReadOn=cache.ReadOn
기능 종료
%>
사용법:
XML에 대한 1개의 캐시 데이터
코드:
프로그램 코드
<!--#include 파일="Conn.asp"-->
<!--#include file="Xml.asp"-->
<%
캐시 설정=새 XmlCacheCls
캐시를 설정합니다.Conn=conn
캐시.XmlFile=Server.Mappath("xmlcache/index/Top.xml")
캐시.Sql="tblProduction에서 상위 15개 prod_id,prod_name,prod_uptime 선택"
캐시.WriteDataToXml
%>
2 캐시된 데이터를 읽는 코드
:
프로그램 코드
<!--#include 파일="Conn.asp"-->
<!--#include file="Xml.asp"-->
<%
캐시 설정=새 XmlCacheCls
캐시를 설정합니다.Conn=conn
캐시.XmlFile=Server.Mappath("xmlcache/index/Top.xml")
캐시.Sql="prod_id asc를 기준으로 tbl생산 주문에서 상위 15개 prod_id,prod_name,prod_uptime 선택"
캐시.읽기데이터
rsArray=cache.SQLArr
isArray(rsArray)이면
i=0에서 ubound(rsArray,2)까지
j=0에서 ubound(rsArray,1)까지
response.Write(rsArray(j,i)&"<br><br>")
다음
다음
종료하면
%>
캐시 시간, 기본 단위는 초 단위로 10분이며, 직접 캐시 시간=60*30 30분으로 설정할 수도 있습니다.