以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 WORD to XML, HTML to XML 』  (http://bbs.xml.org.cn/list.asp?boardid=13)
----  [转帖]用vb将word文档(或其他的二进制数据)生成xml文件并互相转换  (http://bbs.xml.org.cn/dispbbs.asp?boardid=13&rootid=&id=14742)


--  作者:admin
--  发布时间:2/24/2005 12:02:00 AM

--  [转帖]用vb将word文档(或其他的二进制数据)生成xml文件并互相转换
http://blog.csdn.net/coolstar/archive/2001/11/29/5795.aspx

1.    建立一个新的vb工程

2.    引用 Microsoft XML,版本 2.0 或以上

3.    在窗体form1上建立按钮 cmdCreateXML 和 cmdGetBinary

代码:

Option Explicit
Dim oDoc As DOMDocument
Dim DOCINPATH As String
Dim XMLOUTPATH As String
Dim DOCOUTPATH As String

Private Sub cmdCreateXML_Click()
    
    Dim oEle As IXMLDOMElement
    Dim oRoot As IXMLDOMElement
    Dim oNode As IXMLDOMNode
        
    DOCINPATH = App.Path & "\DocInput.doc"
    XMLOUTPATH = App.Path & "\XmlOuput.xml"
          
    Call ReleaseObjects
    
    Set oDoc = New DOMDocument
    oDoc.resolveExternals = True
    
' Create processing instruction and document root
    Set oNode = oDoc.createProcessingInstruction("xml", "version='1.0'")
    Set oNode = oDoc.insertBefore(oNode, oDoc.childNodes.Item(0))
    
' Create document root
    Set oRoot = oDoc.createElement("Root")
    Set oDoc.documentElement = oRoot
    oRoot.setAttribute "xmlns:dt", "urn:schemas-microsoft-com:datatypes"

' Add a few simple nodes with different datatypes
    Set oNode = oDoc.createElement("Document")
    oNode.Text = "Demo"
    oRoot.appendChild oNode
    
    Set oNode = oDoc.createElement("CreateDate")
    oRoot.appendChild oNode
    Set oEle = oNode
    
' Use DataType so MSXML will validate the data type
    oEle.dataType = "date"
         
    oEle.nodeTypedValue = Now
    
    Set oNode = oDoc.createElement("bgColor")
    oRoot.appendChild oNode
    Set oEle = oNode
    
' Use DataType so MSXML will validate the data type
    oEle.dataType = "bin.hex"
         
    oEle.Text = &HFFCCCC
    
    Set oNode = oDoc.createElement("Data")
    oRoot.appendChild oNode
    Set oEle = oNode
    
' Use DataType so MSXML will validate the data type
    oEle.dataType = "bin.base64"
     
' Read in the data
    oEle.nodeTypedValue = ReadBinData(DOCINPATH)
    
' Save xml file
    oDoc.save XMLOUTPATH
    
    MsgBox XMLOUTPATH & " is created for you."
   
End Sub

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
    
'Read from disk
    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 oNode As IXMLDOMNode
      
    If Not (oDoc Is Nothing) Then
        
' Get the data
        Set oNode = oDoc.documentElement.selectSingleNode("/Root/Data")

' Make sure you use a byte array instead of variant
        arrBuffer = oNode.nodeTypedValue
            
' Write to disk
        
        iFile = FreeFile()
        Open strFileName For Binary Access Write As iFile
        Put iFile, , arrBuffer
        Close iFile
    
    End If
    
End Sub

Private Sub cmdGetBinary_Click()
        
    DOCOUTPATH = App.Path & "\DocOutput.doc"
    
    Set oDoc = New DOMDocument
    
    If oDoc.Load(XMLOUTPATH) = True Then
       ' Save the Doc as another file
       WriteBinData DOCOUTPATH
       
       MsgBox DOCOUTPATH & " is created for you."
    Else
        MsgBox oDoc.parseError.reason
    End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
    ReleaseObjects
End Sub

Private Sub ReleaseObjects()
    Set oDoc = Nothing
End Sub

4.    建立word文档DocInput.doc.


5.    保存文档在工程目录下

6.     运行程序点击cmdCreateXML 按钮.一个 XML 文件XmlOuput.xml 就建立了.
点击 cmdGetBinary 按钮就可以生成word文档 DocOutput.doc.


     按照上面的方法,同样可以将任意的二进制数据存为xml,然后再重新生成二进制数据

可以用于web传输等等可以使用xmlhttp的地方


--  作者:AlongleeNet
--  发布时间:3/27/2005 7:48:00 AM

--  
这么好的文章,我收藏
--  作者:ksai
--  发布时间:4/3/2005 8:59:00 AM

--  
看不懂,我是学C#、C++的,VB晕呐!
     搂主,有没有什么方法将XML转为Word的
--  作者:poalex
--  发布时间:4/5/2005 9:39:00 PM

--  
这个好像是将word文件用 base64编码再保存,不是真正的变为xml
--  作者:bound0
--  发布时间:4/8/2005 8:13:00 PM

--  
以下是引用poalex在2005-4-5 21:39:31的发言:
这个好像是将word文件用 base64编码再保存,不是真正的变为xml

是啊,这样的话其实和xml没什么关系;不能体现内容和结构,还要xml干什么?


--  作者:haixing212
--  发布时间:4/20/2005 5:46:00 PM

--  
Dim oDoc As DOMDocument——    Compile error:User-defined type not defined
VB学的不好,怎么才能调出来呢,是因为“2.    引用 Microsoft XML,版本 2.0 或以上”??
yuuyvv1981@163.com QQ:344273090 求助阿!
--  作者:cxh0926
--  发布时间:5/5/2005 10:22:00 PM

--  
能不能实现功能呢?
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
5,343.750ms