設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

123下一頁
返回列表 發(fā)新帖
查看: 12531|回復(fù): 29
打印 上一主題 下一主題

[模塊/函數(shù)] 將文檔保存到XML中,并將保存在XML中的文檔還原。

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2008-8-31 16:09:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是個有趣的過程,使用前先引用xml


創(chuàng)建個類模塊:DocAndXml

  1. Private objDoc As DOMDocument
  2. Public Sub DocToXml(strDocPath As String, strXmlPath As String)
  3.     Dim objEle As IXMLDOMElement
  4.     Dim objRoot As IXMLDOMElement
  5.     Dim objNode As IXMLDOMNode
  6.     objDoc.resolveExternals = True
  7.    
  8.     Set objNode = objDoc.createProcessingInstruction("xml", "version='1.0' encoding='utf-8'")
  9.     Set objNode = objDoc.insertBefore(objNode, objDoc.childNodes.Item(0))
  10.    
  11.     Set objRoot = objDoc.createElement("root")
  12.     Set objDoc.documentElement = objRoot
  13.         objRoot.setAttribute "xmlns:dt", "urn:schemas-microsoft-com:datatypes"
  14.     Set objNode = objDoc.createElement("document")
  15.         objNode.text = GetFilename(strDocPath)
  16.         objRoot.appendChild objNode
  17.    
  18.     Set objNode = objDoc.createElement("createDate")
  19.         objRoot.appendChild objNode
  20.         Set objEle = objNode
  21.         objEle.nodeTypedValue = Format(Now, "yyyy-mm-dd hh:mm:ss")
  22.       
  23.     Set objNode = objDoc.createElement("data")
  24.         objRoot.appendChild objNode
  25.     Set objEle = objNode
  26.         objEle.DataType = "bin.base64"
  27.          
  28.         objEle.nodeTypedValue = ReadBinData(strDocPath)
  29.         objDoc.Save strXmlPath
  30. End Sub
  31. Private Function ReadBinData(ByVal strFileName As String) As Variant
  32.     Dim lLen As Long
  33.     Dim iFile As Integer
  34.     Dim arrBytes() As Byte
  35.     Dim lCount As Long
  36.     Dim strOut As String
  37.     iFile = FreeFile()
  38.     Open strFileName For Binary Access Read As iFile
  39.     lLen = FileLen(strFileName)
  40.     ReDim arrBytes(lLen - 1)
  41.     Get iFile, , arrBytes
  42.     Close iFile
  43.    
  44.     ReadBinData = arrBytes
  45. End Function
  46. Private Sub WriteBinData(ByVal strFileName As String)
  47.     Dim iFile As Integer
  48.     Dim arrBuffer() As Byte
  49.     Dim objNode As IXMLDOMNode
  50.       
  51.     If Not (objDoc Is Nothing) Then
  52.         Set objNode = objDoc.documentElement.selectSingleNode("/root/data")
  53.         arrBuffer = objNode.nodeTypedValue
  54.                   
  55.         iFile = FreeFile()
  56.         Open strFileName For Binary Access Write As iFile
  57.         Put iFile, , arrBuffer
  58.         Close iFile
  59.    
  60.     End If
  61. End Sub
  62. Public Sub XmlToDoc(strDocPath As String, strXmlPath As String)
  63.     If objDoc.Load(strXmlPath) Then
  64.        WriteBinData strDocPath
  65.     End If
  66. End Sub
  67. Private Function GetFilename(FilePath As String) As String
  68. Dim fso, pname
  69. Set fso = CreateObject("Scripting.FileSystemObject")
  70.     If fso.FileExists(FilePath) Then
  71.         Set pname = fso.GetFile(FilePath)
  72.         GetFilename = pname.Name
  73.         Set psize = Nothing
  74.     Else
  75.         GetFilename = ""
  76.     End If
  77. Set fso = Nothing
  78. End Function
  79. Private Sub Class_Initialize()
  80.     Set objDoc = New DOMDocument
  81. End Sub
  82. Private Sub Class_Terminate()
  83.     Set objDoc = Nothing
  84. End Sub
復(fù)制代碼

  1. Dim objDoc As DOMDocument
  2. Dim strDocPath As String
  3. Dim strXmlPath As String
  4. Dim dx As New DocAndXml
  5. Sub DocToXmlTest()
  6.     strDocPath = CurrentProject.Path & "\Book1.xls"
  7.     strXmlPath = CurrentProject.Path & "\XmlOuput.xml"
  8.     dx.DocToXml strDocPath, strXmlPath
  9. End Sub
  10. Sub XmlToDocTest()
  11.     strDocPath = CurrentProject.Path & "\Test1.xls"
  12.     strXmlPath = CurrentProject.Path & "\XmlOuput.xml"
  13.     dx.XmlToDoc strDocPath, strXmlPath
  14. End Sub
復(fù)制代碼

游客,如果您要查看本帖隱藏內(nèi)容請回復(fù)

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊

x
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖 訂閱訂閱
2#
發(fā)表于 2008-8-31 22:20:33 | 只看該作者
很好用。直接使用了 '加密方式' 保存?

這樣acc數(shù)據(jù)就可以導(dǎo)出為xml了,先導(dǎo)出為 xls 或者 doc,然后再改為 xml 。

也可以把記事本,壓縮文檔,先裝入xml,然后釋放出來。

謝謝fans提供。

[ 本帖最后由 wu8313 于 2008-8-31 22:22 編輯 ]

點(diǎn)擊這里給我發(fā)消息

3#
發(fā)表于 2008-8-31 22:33:13 | 只看該作者
不錯的示例, 一個新的方向. 的確受到啟發(fā).
4#
發(fā)表于 2008-9-16 18:17:21 | 只看該作者
非常好的代碼,全新的思路.學(xué)習(xí)![:50]
5#
發(fā)表于 2008-9-16 18:58:05 | 只看該作者
[:50] [:50] [:50]
6#
發(fā)表于 2008-9-18 09:29:46 | 只看該作者
請教fans:如何將下面數(shù)據(jù)讀出。

  <?xml version="1.0" encoding="utf-8" ?>
- <root xmlns:dt="urn:schemas-microsoft-com:datatypes">
  <Item1>張三</Item1>
  <Item2>李四</Item2>
  <Item3>王五</Item3>
  </root>

如何將“張三,李四,王五”數(shù)據(jù)讀出。
Set objnodes = objdom.documentElement.selectSingleNode("/root/item1")
        Text1.Text = objnodes.nodeTypedValue
我這么寫怎么讀不出??

問題已經(jīng)解決。

[ 本帖最后由 chenwm1973 于 2008-9-18 13:27 編輯 ]
7#
 樓主| 發(fā)表于 2008-9-20 23:54:54 | 只看該作者
樓頂已經(jīng)更新了。
8#
 樓主| 發(fā)表于 2008-9-20 23:58:30 | 只看該作者
原帖由 chenwm1973 于 2008-9-18 09:29 發(fā)表
請教fans:如何將下面數(shù)據(jù)讀出。

   
-
  張三
  李四
  王五
  

如何將“張三,李四,王五”數(shù)據(jù)讀出。
Set objnodes = objdom.documentElement.selectSingleNode("/root/item1")
        Text1.T ...


使用 objNode.Text

[ 本帖最后由 fan0217 于 2008-9-21 07:50 編輯 ]
9#
發(fā)表于 2008-9-22 20:45:23 | 只看該作者
[:35] [:35]
10#
發(fā)表于 2008-10-8 14:33:30 | 只看該作者
asfas
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2025-7-13 05:03 , Processed in 0.105347 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表