在asp下通过xml打包网站文件的方法

今天在网上找了下用xml打包文件、文件夹之类的内容看了看,在本机上调试了下,感觉还挺有用处

这个方法可以把整个文件夹打包到xml文件中,把这个xml文件文件和解包文件放在一起后,运行解包文件就可以把原来的文件释放出来,这样我们就可以把网站打包上传到虚拟主机,再运行解包文件就可以了。我在本地测试之选择了少部分文件,不知在文件很多的情况执行效率如何。
其实实现的思路也很简单,主要利用的是xml文件可以存放二进制数据的原理。有兴趣的朋友可以下载下面的附件研究下!!
解包文件

代码如下:

<%@LANGUAGE=VBSCRIPT CODEPAGE=65001%> 
<% Option Explicit %> 
<% On Error Resume Next %> 
<% Response.Charset=UTF-8 %> 
<% Server.ScriptTimeout=99999999 %>
<html xmlns=http://www.w3.org/1999/xhtml> 
<head> 
<meta http-equiv=Content-Type content=text/html; charset=utf-8 /> 
<title>脚本之家——文件解包程序_www.jb51.net</title> 
</head> 
<body> 
<% 
Dim strLocalPath 
'得到当前文件夹的物理路径 
strLocalPath=Left(Request.ServerVariables(PATH_TRANSLATED),InStrRev(Request.ServerVariables(PATH_TRANSLATED),\)) 
Dim objXmlFile 
Dim objNodeList 
Dim objFSO 
Dim objStream 
Dim i,j 
Set objXmlFile = Server.CreateObject(Microsoft.XMLDOM) 
    objXmlFile.load(Server.MapPath(update.xml)) 
    If objXmlFile.readyState=4 Then 
        If objXmlFile.parseError.errorCode = 0 Then 
            Set objNodeList = objXmlFile.documentElement.selectNodes(//folder/path) 
            Set objFSO = CreateObject(Scripting.FileSystemObject) 
                j=objNodeList.length-1 
                For i=0 To j 
                    If objFSO.FolderExists(strLocalPath & objNodeList(i).text)=False Then 
                        objFSO.CreateFolder(strLocalPath & objNodeList(i).text) 
                    End If 
                    Response.Write 创建目录 & objNodeList(i).text & <br/> 
                    Response.Flush 
                Next 
            Set objFSO = nothing 
            Set objNodeList = nothing 
            Set objNodeList = objXmlFile.documentElement.selectNodes(//file/path) 
                j=objNodeList.length-1 
                For i=0 To j 
                    Set objStream = CreateObject(ADODB.Stream) 
                        With objStream 
                            .Type = 1 
                            .Open 
                            .Write objNodeList(i).nextSibling.nodeTypedvalue 
                            .SaveToFile strLocalPath & objNodeList(i).text,2 
                            Response.Write 释放文件 & objNodeList(i).text & <br/> 
                            Response.Flush 
                            .Close 
                        End With 
                    Set objStream = Nothing 
                Next 
            Set objNodeList = nothing 
        End If 
    End If 
Set objXmlFile = Nothing 
response.write 文件解包完毕 
%> 
</body> 
</html>

pack.asp 打包文件

代码如下:

<%@LANGUAGE=VBSCRIPT CODEPAGE=65001%> 
<% Option Explicit %> 
<% On Error Resume Next %> 
<% Response.Charset=UTF-8 %> 
<% Server.ScriptTimeout=99999999 %>
<!DOCTYPE html PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd> 
<html xmlns=http://www.w3.org/1999/xhtml> 
<head> 
<meta http-equiv=Content-Type content=text/html; charset=utf-8 /> 
<title>文件打包程序_脚本之家_www.jb51.net</title> 
</head> 
<body> 
<% 
Dim ZipPathDir,ZipPathFile 
Dim startime,endtime 
'在此更改要打包文件夹的路径 
ZipPathDir = D:\testasp\dictionary\xmlPacked\scrollColor' 
ZipPathFile = update.xml 
if right(ZipPathDir,1)<>\ then ZipPathDir=ZipPathDir&\ 
'开始打包 
CreateXml(ZipPathFile) 
'遍历目录内的所有文件以及文件夹 
sub LoadData(DirPath) 
    dim XmlDoc 
    dim fso            'fso对象 
    dim objFolder      '文件夹对象 
    dim objSubFolders  '子文件夹集合 
    dim objSubFolder   '子文件夹对象 
    dim objFiles       '文件集合 
    dim objFile        '文件对象 
    dim objStream 
    dim pathname,TextStream,pp,Xfolder,Xfpath,Xfile,Xpath,Xstream 
    dim PathNameStr 
    response.Write(==========&DirPath&==========<br>) 
    set fso=server.CreateObject(scripting.filesystemobject) 
    set objFolder=fso.GetFolder(DirPath)'创建文件夹对象 
    Response.Write DirPath 
    Response.flush 
    Set XmlDoc = Server.CreateObject(Microsoft.XMLDOM) 
    XmlDoc.load Server.MapPath(ZipPathFile) 
    XmlDoc.async=false 
    '写入每个文件夹路径 
    set Xfolder = XmlDoc.SelectSingleNode(//root).AppendChild(XmlDoc.CreateElement(folder)) 
    Set Xfpath = Xfolder.AppendChild(XmlDoc.CreateElement(path)) 
        Xfpath.text = replace(DirPath,ZipPathDir,) 
        set objFiles=objFolder.Files 
            for each objFile in objFiles 
                if lcase(DirPath & objFile.name) <> lcase(Request.ServerVariables(PATH_TRANSLATED)) then 
                    Response.Write ---<br/> 
                    PathNameStr = DirPath &  & objFile.name 
                    Response.Write PathNameStr &  
                    Response.flush 
                    '================================================ 
                    '写入文件的路径及文件内容 
                   set Xfile = XmlDoc.SelectSingleNode(//root).AppendChild(XmlDoc.CreateElement(file)) 
                   Set Xpath = Xfile.AppendChild(XmlDoc.CreateElement(path)) 
                       Xpath.text = replace(PathNameStr,ZipPathDir,) 
                   '创建文件流读入文件内容,并写入XML文件中 
                   Set objStream = Server.CreateObject(ADODB.Stream) 
                   objStream.Type = 1 
                   objStream.Open() 
                   objStream.LoadFromFile(PathNameStr) 
                   objStream.position = 0 
                   Set Xstream = Xfile.AppendChild(XmlDoc.CreateElement(stream)) 
                       Xstream.SetAttribute xmlns:dt,urn:schemas-microsoft-com:datatypes 
                       '文件内容采用二制方式存放 
                       Xstream.dataType = bin.base64 
                       Xstream.nodeTypedValue = objStream.Read() 
                   set objStream=nothing 
                   set Xpath = nothing 
                   set Xstream = nothing 
                   set Xfile = nothing 
                  '================================================ 
                end if 
            next 
    Response.Write <p> 
    XmlDoc.Save(Server.Mappath(ZipPathFile)) 
    set Xfpath = nothing 
    set Xfolder = nothing 
    set XmlDoc = nothing 
    '创建的子文件夹对象 
    set objSubFolders=objFolder.Subfolders 
        '调用递归遍历子文件夹 
        for each objSubFolder in objSubFolders 
            pathname = DirPath & objSubFolder.name & \ 
            LoadData(pathname) 
        next 
    set objFolder=nothing 
    set objSubFolders=nothing 
    set fso=nothing 
end sub 
'创建一个空的XML文件,为写入文件作准备 
sub CreateXml(FilePath) 
    '程序开始执行时间 
    startime=timer() 
    dim XmlDoc,Root 
    Set XmlDoc = Server.CreateObject(Microsoft.XMLDOM) 
        XmlDoc.async = False 
        Set Root = XmlDoc.createProcessingInstruction(xml,version='1.0' encoding='UTF-8') 
        XmlDoc.appendChild(Root) 
        XmlDoc.appendChild(XmlDoc.CreateElement(root)) 
        XmlDoc.Save(Server.MapPath(FilePath)) 
        Set Root = Nothing 
    Set XmlDoc = Nothing 
    LoadData(ZipPathDir) 
    '程序结束时间 
    endtime=timer() 
    response.Write(页面执行时间: & FormatNumber((endtime-startime),3) & 秒) 
end sub 
%> 
</body> 
</html>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇