首页 | 联系我们 | 叶凡网络官方QQ群:323842844
游客,欢迎您! 请登录 免费注册 忘记密码
您所在的位置:首页 > 开发语言 > ASP开发 > 正文

合肥网站建设:操作xml的类

作者:cocomyyz 来源:转载 日期:2013-11-19 16:40:30 人气:0 加入收藏 评论:0 标签:合肥网站建设:操作xml的类

<%
'' Site validator 1.0.0
'' Very simple concept, run this script on your server, it records the file details to an
'' XML file which you download and store. Then, when you come back to make changes you can
'' run the XML file back through this script and it will tell you if any of the files have
'' been modified. Quite simple really.
'' Requires XML parser version 3 to work really. Also needs access to the FileSystemObject.
Dim objRequest, objFSO, sXML, objXML, objNode, objFile, lDifferences, sVersion, sDate
sVersion = "1.0.0"
Response.Expires = -1
Set objRequest = New ProxyRequest
if UCase(objRequest("action")) = "UPLOAD" then
Response.ContentType = "text/html"
%>
<HTML>
<HEAD>
<TITLE>ASPValidate, Site validator <%=sVersion%></TITLE>
</HEAD>
<BODY>
<h1>ASPValidate, Site validator <%=sVersion%></h1>
<h2>Author: Chris Read (<a href="mailtmrjolly@bigpond.net.au">Mail</a>, <a href="http://users.bigpond.net.au/mrjolly.">Web</a>)</h2>
<p>Validation results</p>
<%
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objXML = Server.CreateObject("MSXML2.DOMDocument")
objXML.async = False
sXML = objRequest("xmlupload")
objXML.loadXML objRequest.ASCIIToUNICODE(sXML)
lDifferences = 0
'' Now we go through the XML entries and validate each one against that on the server
For Each objNode in objXML.documentElement.childNodes
 on error resume next
 Set objFile = objFSO.GetFile(objNode.getAttribute("path"))
 if err.number <> 0 then
  '' Problem with the file
  Response.Write "<b>"
  Response.Write objNode.getAttribute("path") & "<br>"
  Response.Write "^^^^ FILE HAS BEEN REMOVED<br>"
  Response.Write "</b>"
 else
  if CStr(objFile.DateLastModified) <> objNode.getAttribute("modified") or CStr(objFile.Size) <> objNode.getAttribute("size") then
   Response.Write "<b>"
   Response.Write objNode.getAttribute("path") & "<br>^^^^ Changed, "
   Response.Write "original: " & objNode.getAttribute("modified") & " modified: " & objFile.DateLastModified & ", "
   Response.Write "was " & objNode.getAttribute("size") & " bytes - now " & CStr(objFile.Size) & " bytes<br>"
   Response.Write "</b>"
   lDifferences = lDifferences + 1
  elseif objRequest("view") <> "" then
   Response.Write objNode.getAttribute("path") & "- File has not changed<br>"
  end if
 end if
 on error goto 0
Next
if lDifferences = 0 then
 Response.Write "<p>The site matches the last update</p>"
else
 Response.Write "<p>" & lDifferences & " difference(s) detected in the above files</p>"
end if
%>
<a href="aspvalidate.asp">Back to the main page</a>
</BODY>
</HTML>
<%
Response.End
elseif UCase(objRequest.QueryString("action")) = "XML" then
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
sXML = "<?xml version=''1.0''?>" & vbCRLF
sXML = sXML & "<!-- Generated by Site Validator " & sVersion & " -->" & vbCRLF
sXML = sXML & "<!-- Author: Chris Read -->" & vbCRLF
sXML = sXML & "<site>" & vbCRLF
sXML = sXML & ProcessFolder(Server.MapPath("/"))
sXML = sXML & "</site>" & vbCRLF
sDate = Year(Date()) & "-" & Month(Date()) & "-" & Day(Date())
Response.ContentType = "text/xml"
Response.AddHeader "Content-Disposition","attachment; filename=site" & sDate & ".xml;"
Response.Write sXML
Response.End
else
Response.ContentType = "text/html"
%>
<HTML>
<HEAD>
<TITLE>ASPValidate, Site validator <%=sVersion%></TITLE>
</HEAD>
<BODY>
<h1>ASPValidate, Site validator <%=sVersion%></h1>
<h2>Author: Chris Read (<a href="mailtmrjolly@bigpond.net.au">Mail</a>, <a href="http://users.bigpond.net.au/mrjolly.">Web</a>)</h2>
<h3>It validates sites</h3>
<p>This script will scan your entire web site from the root folder, and record the file sizes and last modified dates for all ASP pages.
This is saved as XML. Then, at a later date, when you need to make adjustments or check anything, you can load the XML into
this script again and it''ll tell you which files have changed and when.</p>
Checksum all ASP files on this site and generate an XML checksum file<br>
<a href="aspvalidate.asp?action=xml&html=0">Right-click here and select "Save As" to download for ASP files only</a><br>
<a href="aspvalidate.asp?action=xml&html=1">Right-click here and select "Save As" to download for ASP and HTML files</a><br>
<form action="aspvalidate.asp" method="post" enctype="multipart/form-data" id=form1 name=form1>
<br>OR<br><br>
Upload XML File of checksums and validate it against this site<br>
File: <input type=file name=xmlupload><br>
Show all results: <input type=checkbox name=view><br>
<input type=submit name=action value="Upload">
</form>
</BODY>
</HTML>
<%
Response.End
end if
'' Bit of recursion to traverse the folder structure building XML
Function ProcessFolder(sFolder)
Dim objFolder, objRoot, objFile, sTemp, sLastModified, sSize
Set objRoot = objFSO.GetFolder(sFolder)
sTemp = ""
For Each objFile in objRoot.Files
 if (Right(objFile.Name,4) = ".asp" or ((Right(objFile.Name,5) = ".html" or Right(objFile.Name,4) = ".htm") and Request("html") = 1)) and instr(sFolder & "" & objFile.Name,"_vti_cnf") = 0 then
  sLastModified = objFile.DateLastModified
  sSize = objFile.Size
  sTemp = sTemp & "<file path=''" & sFolder & "" & objFile.Name & "'' modified=''" & sLastModified & "'' size=''" & sSize & "''/>" & vbCRLF
 end if
Next
For Each objFolder in objRoot.SubFolders
 sTemp = sTemp & ProcessFolder(sFolder & "" & objFolder.Name)
Next
Set objFolder = Nothing
ProcessFolder = sTemp
End Function
'' Reques object proxy for uploads.
Class ProxyRequest
Public ClientCertificate
Public Cookies
Public Form
Public QueryString
Public ServerVariables
Public TotalBytes
Private m_Item
Public Default Property Get Item(sIndex)
 Item = m_Item(sIndex)
End Property
Private sBinaryText
Public Function BinaryRead(lTotalBytes)
 BinaryRead = LeftB(sBinaryText,lTotalBytes)
End Function
Private Sub ParseRequest()
 Dim sDelimeter
 Dim lKeyLength
 Dim lBlockEnd
 Dim sBlock
 Dim sTemp
 Dim sField
 Dim lStart
 Dim lLength
 Dim sFilename
 Dim sContentType
 Dim sContent
 sBlock = sBinaryText
 lKeyLength = InstrB(1,sBlock,ChrB(&H0D)) - 1
 if lKeyLength > 0 then
  sDelimeter = LeftB(sBlock,lKeyLength)
  lBlockEnd = 0
  while lBlockEnd >= 0
   '' Chop off the key, including the CR/LF pair
   sBlock = RightB(sBlock,LenB(sBlock) - (lBlockEnd + lKeyLength + 2))
   lBlockEnd = InStrB(1,sBlock,sDelimeter) - 1
   if lBlockEnd >= 0 then
    sTemp = LeftB(sBlock,lBlockEnd - 2)
    lStart = InStrB(1,sTemp,UNICODEToASCII("name=")) + 6
    lLength = InStrB(lStart,sTemp,ChrB(34)) - lStart
    sField = MidB(sTemp,lStart,lLength)
    lStart = InStrB(1,sTemp,UNICODEToASCII("filename=")) + 10
    lLength = InStrB(lStart,sTemp,ChrB(34)) - lStart
    if lStart > 10 then
     sFilename = MidB(sTemp,lStart,lLength)
     lStart = InStrB(1,sTemp,UNICODEToASCII("Content-Type:")) + 14
     lLength = InStrB(lStart,sTemp,ChrB(&H0D)) - lStart
     sContentType = MidB(sTemp,lStart,lLength)
    else
     sFilename = ""
     sContentType = ""
    end if
    lStart = InStrB(1,sTemp,UNICODEToASCII(vbCRLF & vbCRLF)) + 4
    lLength = LenB(sTemp) - lStart + 1
    sContent = MidB(sTemp,lStart,lLength)
  
    if ASCIIToUNICODE(sFilename) <> "" then
     m_Item.Add ASCIIToUNICODE(sField),sContent
     m_Item.Add ASCIIToUNICODE(sField) & "_filename",ASCIIToUNICODe(sFilename)
     m_Item.Add ASCIIToUNICODE(sField) & "_contenttype",ASCIIToUNICODE(sContentType)
    else
     m_Item.Add ASCIIToUNICODE(sField),ASCIIToUNICODE(sContent)
    end if
   end if
  wend
 end if
End Sub
Public Function UNICODEToASCII(sText)
 Dim lTemp
 Dim objStream
 Set objStream = Server.CreateObject("ADODB.Stream")
 objStream.Open
 For lTemp = 1 To Len(sText)
  objStream.WriteText ChrB(Asc(Mid(sText,lTemp,1)))
 Next
 objStream.Position = 0
 UNICODEToASCII = objStream.ReadText
End Function
Public Function ASCIIToUNICODE(sText)
 '' Do this with the stream, avoiding VBScript string concatenation, which is slow to say the least
 Dim lTemp
 Dim objStream
 Set objStream = Server.CreateObject("ADODB.Stream")
 objStream.Open
 For lTemp = 1 To LenB(sText)
  objStream.WriteText MidB(sText, lTemp, 1) & ChrB(0), 0
 Next
 objStream.Position = 0
 ASCIIToUNICODE = objStream.ReadText
End Function
Private Sub Class_Initialize()
 Set m_Item = Server.CreateObject("Scripting.Dictionary")
 Set ClientCertificate = Request.ClientCertificate
 Set Cookies = Request.Cookies
 Set Form = Request.Form
 Set QueryString = Request.QueryString
 Set ServerVariables = Request.ServerVariables
 TotalBytes = Request.TotalBytes
 sBinaryText = Request.BinaryRead(Request.TotalBytes)
 ParseRequest
End Sub
Private Sub Class_Terminate()
 Set ClientCertificate = Nothing
 Set Cookies = Nothing
 Set Form = Nothing
 Set QueryString = Nothing
 Set ServerVariables = Nothing
End Sub
End Class
%>

本文网址:http://www.mingyangnet.com/html/asp/1005.html
读完这篇文章后,您心情如何?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
更多>>网友评论
发表评论
编辑推荐
  • 没有资料