将文档保存到XML中,并将保存在XML中的文档还原。-fan0217
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> 技术类


将文档保存到XML中,并将保存在XML中的文档还原。

发表时间:2008/10/14 8:11:37 评论(1) 浏览(4806)  评论 | 加入收藏 | 复制
   
摘 要:将文档保存到XML中,并将保存在XML中的文档还原。
正 文:

点击下载此附件

这是个有趣的过程,使用前先引用xml


创建个类模块:DocAndXml
CODE:

Private objDoc As DOMDocument
Public Sub DocToXml(strDocPath As String, strXmlPath As String)
    Dim objEle As IXMLDOMElement
    Dim objRoot As IXMLDOMElement
    Dim objNode As IXMLDOMNode
    objDoc.resolveExternals = True
   
    Set bjNode = objDoc.createProcessingInstruction("xml", "version='1.0' encoding='utf-8'")
    Set bjNode = objDoc.insertBefore(objNode, objDoc.childNodes.Item(0))
   
    Set bjRoot = objDoc.createElement("root")
    Set objDoc.documentElement = objRoot
        objRoot.setAttribute "xmlns:dt", "urn:schemas-microsoft-com:datatypes"
    Set bjNode = objDoc.createElement("document")
        objNode.text = GetFilename(strDocPath)
        objRoot.appendChild objNode
   
    Set bjNode = objDoc.createElement("createDate")
        objRoot.appendChild objNode
        Set bjEle = objNode
        objEle.nodeTypedValue = Format(Now, "yyyy-mm-dd hh:mm:ss")
      
    Set bjNode = objDoc.createElement("data")
        objRoot.appendChild objNode
    Set bjEle = objNode
        objEle.DataType = "bin.base64"
        
        objEle.nodeTypedValue = ReadBinData(strDocPath)
        objDoc.Save strXmlPath
End Sub
Private Function ReadBinData(ByVal strFileName As String) As Variant
    Dim lLen As Long
    Dim iFile As Integer
    Dim arrBytes() As Byte
    Dim lCount As Long
    Dim strOut As String
    iFile = FreeFile()
    Open strFileName For Binary Access Read As iFile
    lLen = FileLen(strFileName)
    ReDim arrBytes(lLen - 1)
    Get iFile, , arrBytes
    Close iFile
  
    ReadBinData = arrBytes
End Function
Private Sub WriteBinData(ByVal strFileName As String)
    Dim iFile As Integer
    Dim arrBuffer() As Byte
    Dim objNode As IXMLDOMNode
     
    If Not (objDoc Is Nothing) Then
        Set bjNode = objDoc.documentElement.selectSingleNode("/root/data")
        arrBuffer = objNode.nodeTypedValue
                 
        iFile = FreeFile()
        Open strFileName For Binary Access Write As iFile
        Put iFile, , arrBuffer
        Close iFile
   
    End If
End Sub
Public Sub XmlToDoc(strDocPath As String, strXmlPath As String)
    If objDoc.Load(strXmlPath) Then
       WriteBinData strDocPath
    End If
End Sub
Private Function GetFilename(FilePath As String) As String
Dim fso, pname
Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FileExists(FilePath) Then
        Set pname = fso.GetFile(FilePath)
        GetFilename = pname.Name
        Set psize = Nothing
    Else
        GetFilename = ""
    End If
Set fso = Nothing
End Function
Private Sub Class_Initialize()
    Set bjDoc = New DOMDocument
End Sub
Private Sub Class_Terminate()
    Set bjDoc = Nothing
End Sub
CODE:

Dim objDoc As DOMDocument
Dim strDocPath As String
Dim strXmlPath As String
Dim dx As New DocAndXml
Sub DocToXmlTest()
    strDocPath = CurrentProject.Path & "\Book1.xls"
    strXmlPath = CurrentProject.Path & "\XmlOuput.xml"
    dx.DocToXml strDocPath, strXmlPath
End Sub
Sub XmlToDocTest()
    strDocPath = CurrentProject.Path & "\Test1.xls"
    strXmlPath = CurrentProject.Path & "\XmlOuput.xml"
    dx.XmlToDoc strDocPath, strXmlPath
End Sub


Access软件网交流QQ群(群号:198465573)
 
 相关文章
ADO版本造成recordset无法直接XML持久化  【微软  2009/2/5】
推荐 access 2007 /access 2010 Ribbo...  【andymark  2009/9/30】
学习Excel VBA与XML、ASP协同应用  【cgyglen  2009/11/13】
利用OWC导入CSV,HTML,XML格式的数据实例  【yehf  2012/4/1】
【Access源码】xmlhttp中文返回乱码解决办法  【漏蛧尐魚℡  2013/4/25】
常见问答
技术分类
相关资源
文章搜索
关于作者

fan0217

文章分类

文章存档

友情链接