2011-02-03 95 views
0

我想創建用於解析郵件(這是作爲一個html表)的Outlook的vba腳本,並創建一個基於表中某些的值的xml文件。vba腳本來解析html和創建xml

請問我可以從哪裏開始?
你也可以請諮詢或向我推薦有關這些問題的資源/教程?

請考慮,我沒有VBA的經驗,只是一些基本的C#

感謝 TC

+0

你能舉一個例子嗎? – JimmyPena 2011-11-09 21:02:29

回答

0

銘記結構良好的HTML基本 XML,我會嘗試看看一些關於解析XML時已經被問到的SO的問題,例如this

你只是在尋找的tabletr裏面那裏面那些td ...

+0

我想解析以html形式發送的消息項目。 然後創建一個新的xml保存爲一個文件 – Tal 2011-02-03 10:50:17

0
'***************************************************************** 
'This is how the main structure of the XMl file is created in VBA 
'Use this as guidance to create new XML files. 
'***************************************************************** 

Sub CreateXML() 

Dim objDom As DOMDocument 
Dim objRootElem As IXMLDOMElement 
Dim objSubRootElem As IXMLDOMElement 
Dim objMemberElem As IXMLDOMElement 
Dim objSubMemberElem As IXMLDOMElement 
Dim objMemberRel As IXMLDOMAttribute 
Dim objMemberName As IXMLDOMElement 

Set objDom = New DOMDocument  

' Creates root element 
'Set objRootElem = objDom.createElement("r1") 
'objDom.appendChild objRootElem 

' Creates sub root element 
'Set objSubRootElem = objDom.createElement("r2") 
'objRootElem.appendChild objSubRootElem 

' Creates Error Date & Time element 
'Set objMemberElem = objDom.createElement("r3") 
'objSubRootElem.appendChild objMemberElem 

' Create element under Member element, and 
' gives value "some guy" 
'Set objMemberName = objDom.createElement("r3_Tag") 
'objMemberElem.appendChild objMemberName 
'objMemberName.Text = "value" 

' Creates User Name element 
'Set objMemberElem = objDom.createElement("r2_tag") 
'objSubRootElem.appendChild objMemberElem 
'objMemberElem.Text = "value" 

' Creates Error Date & Time element 
'Set objMemberElem = objDom.createElement("r3") 
'objSubRootElem.appendChild objMemberElem 

' Create element under Member element, and 
' gives value "some guy" 
'Set objMemberName = objDom.createElement("r3_Tag") 
'objMemberElem.appendChild objMemberName 
'objMemberName.Text = "value" 

' Creates User Name element 
'Set objMemberElem = objDom.createElement("r2_tag") 
'objSubRootElem.appendChild objMemberElem 
'objMemberElem.Text = "value" 

「爲了使這一些東西對人類更具可讀性,我們需要添加格式,縮進,並添加一個 回到孩子面前。然後遞歸地用 格式縮小縮進的孩子。

Sub FormatXmlNode(ByVal node As IXMLDOMNode, ByVal indent As Integer) 
    Dim child As IXMLDOMNode 
    Dim text_only As Boolean 

    ' Do nothing if this is a text node. 
    If TypeOf node Is IXMLDOMText Then Exit Sub 

    ' See if this node contains only text. 
    text_only = True 
    If node.HasChildNodes Then 
     For Each child In node.ChildNodes 
      If Not (TypeOf child Is IXMLDOMText) Then 
       text_only = False 
       Exit For 
      End If 
     Next child 
    End If 

    ' Process child nodes. 
    If node.HasChildNodes Then 

     ' Add a carriage return before the children. 
     If Not text_only Then 
      node.InsertBefore node.OwnerDocument.createTextNode(Chr(10)), node.FirstChild 
     End If 

     ' Format the children. 
     For Each child In node.ChildNodes 
      FormatXmlNode child, indent + 2 
     Next child 
    End If 

    ' Format this element. 
    If indent > 0 Then 

     ' Indent before this element. 
     node.ParentNode.InsertBefore node.OwnerDocument.createTextNode(Space$(indent)), node 

     ' Indent after the last child node. 
     If Not text_only Then node.appendChild node.OwnerDocument.createTextNode(Space$(indent)) 

     ' Add a carriage return after this node. 
     If node.NextSibling Is Nothing Then 
      node.ParentNode.appendChild node.OwnerDocument.createTextNode(Chr(10)) 
     Else 
      node.ParentNode.InsertBefore node.OwnerDocument.createTextNode(Chr(10)), node.NextSibling 
     End If 
    End If 
End Sub 

'將XML數據保存到磁盤。

On Error Resume Next 
MkDir ("C:\Users\" & Environ$("Username") & _ 
"\Desktop\FXML_FILES") 'Creates folder on desktop, ignores error if it already exists 
On Error GoTo 0 

objDom.Save ("C:\Users\" & Environ$("Username") & _ 
"\Desktop\XML_FILES\" & "filename.xml")