如何解析XML文件并写入数据然后保存

时间:2014-01-31 23:08:55

标签: xml excel-vba xml-parsing xmldom vba

我正在研究以下内容:

  1. Excel表格,其中包含要求最终用户输入的单元格 要求的价值;完成
  2. 读取在这些单元格中输入的值的代码 最终用户;
  3. 加载XML文件;完成
  4. 解析它,然后将从Excel单元格中检索到的值写入XML文件(遵循规则),然后保存;我被困在这里!
  5. 启动我的应用程序(另一个脚本稍后将使用XML文件值。)
  6. 我会尽可能地简化:

    Excel文件将类似于以下示例...

       CellA     CellB
    1  T1        V1
    2  T2        V2
    3  T3        V3
    4  T4        V4
    5  T5        V5
    6  T6        V6
    

    “T”指标题。最终用户将输入值V1,V2,... V6

    XML文件的结构如下:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <Environment>
        <Variable>
            <Name></Name>
            <Caption>T1</Caption>
            <Type>TEXT</Type>
            <Value>V1</Value>
            <Description></Description>
        </Variable>
            <Variable>
            <Name></Name>
            <Caption>T2</Caption>
            <Type>TEXT</Type>
            <Value>V2</Value>
            <Description></Description>
        </Variable>
            <Variable>
            <Name></Name>
            <Caption>T3</Caption>
            <Type>TEXT</Type>
            <Value>V3</Value>
            <Description></Description>
        </Variable> <Variable>
            <Name></Name>
            <Caption>T4</Caption>
            <Type>TEXT</Type>
            <Value>V4</Value>
            <Description></Description>
        </Variable> <Variable>
            <Name></Name>
            <Caption>T5</Caption>
            <Type>TEXT</Type>
            <Value>V5</Value>
            <Description></Description>
        </Variable>
        </Variable> <Variable>
            <Name></Name>
            <Caption>T6</Caption>
            <Type>TEXT</Type>
            <Value>V6</Value>
            <Description></Description>
        </Variable>
    </Environment>
    

    如您所见,我需要解析此文件并输入值(V1 .... V6)并参考每个文件。

    下面是我的VBA代码,直到我被困住的行:

    'Option Explicit
    Private Sub RunTest_Click()
    
    Dim envFrmwrkPath As String
    Dim ApplicationName As String
    Dim TestIterationName, ServerIp, Login, Password, TraderLiteLogPath  As String
    Dim objfso, app, Eval As Object
    Dim i, Msgarea`enter code here`
    
    Dim EnvVarXML As MSXML2.DOMDocument60
    
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    '''these are added when trying to find a way to parse the xml --- you can change them
    Dim Variable As MSXML2.IXMLDOMNode
    'Dim oAttributes As MSXML.IXMLDOMNamedNodeMap
    Dim ORoot As MSXML2.IXMLDOMNode
    Dim objUIElement As MSXML2.IXMLDOMElement
    Dim OChildren As MSXML2.IXMLDOMNodeList
    Dim OChild As MSXML2.IXMLDOMNode
    Dim OVariable As MSXML2.IXMLDOMNode
    Dim OAttributes As MSXML2.IXMLDOMNamedNodeMap
    'Dim objUIElement As Object
    Dim field As Object
    ''''''''''''''''''''''''''''''''''''''''''''''''''''
    
    
    'load Env Variables from Excel
    
    ApplicationName = ActiveSheet.Range("E4").Value
    envFrmwrkPath = ActiveSheet.Range("E6").Value
    TestIterationName = ActiveSheet.Range("E8").Value
    ServerIp = ActiveSheet.Range("E10").Value
    Login = ActiveSheet.Range("E12").Value
    Password = ActiveSheet.Range("E14").Value
    TraderLiteLogPath = ActiveSheet.Range("E16").Value
    
    'load xml file
    Set objParser = CreateObject("Microsoft.XMLDOM")
    Set EnvVarXML = New MSXML2.DOMDocument60
    
    
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    ''test_load
    '''''''''''''''-----------------------------------------------------
    'Set EnvVarXML = CreateObject("Microsoft.XMLDOM")
    'Set EnvVarXML = New MSXML2.DOMDocument60
     'If EnvVarXML.Load(envFrmwrkPath & "\Environment\EnvVar.xml") Then
      ' for debug only
      'MsgBox "file loaded correctly", vbOKOnly
      ' for debug only
     'Else
     ' for debug only
     'MsgBox "file not loaded", vbcrtical
     ' for debug only
      'End If
    '''''''''''''''-----------------------------------------------------
    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
    
    'load xml file
    EnvVarXML.Load (envFrmwrkPath & "\Environment\EnvVar.xml")
    
     'parse file and change values
     '''the following may have no sense for an experiment one of you
     Set ORoot = EnvVarXML.DocumentElement
     For Each OVariable In ORoot.ChildNodes
       Set OAttributes = OVariable.Attributes
       Set OChildren = OVariable.ChildNodes
        '''deleted many lines as found no way ''''''' 
           Set EnvVarXML = Nothing
     Next
        EnvVarXML.Save (envFrmwrkPath & "\Environment\EnvVar.xml")
    

1 个答案:

答案 0 :(得分:1)

以下是一些可以帮助您入门的代码

Dim doc As DOMDocument
Set doc = New DOMDocument
doc.Load "C:\x.xml"
Dim Variables As IXMLDOMNodeList
Dim variable As IXMLDOMNode
Set Variables = doc.SelectNodes("/Environment/Variable")
For Each variable In Variables
    Debug.Print variable.SelectNodes("Caption").Item(0).Text
    Debug.Print variable.SelectNodes("Type").Item(0).Text
Next

要使其工作,请选择“工具” - “引用”,然后选择“Microsoft XML v6.0”。 有很多方法可以解决这个问题,但在这种情况下,XPath(SelectNodes中使用的语言)非常好用。