vba 如何解析 XML 文件并写入数据然后保存
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/21491736/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to parse an XML file and write in data then save it
提问by user3232996
I am working on something like the following:
我正在研究以下内容:
- An Excel sheet with some cells where the end user is asked to enter required values; done
- Code that read values entered in these cells by end users;
- Load an XML file; done
- Parse it and then write the values retrieved from Excel cells into XML file (following a rule) then save it; I am stuck here!
- Start my application (another script will use the XML file values later).
- 包含一些单元格的 Excel 工作表,要求最终用户输入所需的值;完毕
- 读取最终用户在这些单元格中输入的值的代码;
- 加载一个 XML 文件;完毕
- 解析它,然后将从 Excel 单元格中检索到的值写入 XML 文件(遵循规则)然后保存;我被困在这里了!
- 启动我的应用程序(另一个脚本稍后将使用 XML 文件值)。
I will simplify as much as possible:
我会尽量简化:
The Excel file will be like the following example...
Excel 文件将类似于以下示例...
CellA CellB
1 T1 V1
2 T2 V2
3 T3 V3
4 T4 V4
5 T5 V5
6 T6 V6
"T" refers to title. The end user will enter the Values V1, V2, ... V6
“T”指的是标题。最终用户将输入值 V1、V2、... V6
The XML file is structured like this:
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>
As you can see I need to parse this file and enter values (V1....V6) into with reference to for each one.
如您所见,我需要解析此文件并为每个文件输入参考值 (V1....V6)。
Below is my VBA code until the line where I am stuck:
下面是我的 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")
回答by Sam
Here is some code that can help you get started
这是一些可以帮助您入门的代码
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
To make it work, select Tools - References and select Microsoft XML v6.0. There are many ways to solve this, but XPath (the language used in SelectNodes) is very good to know in cases like this.
要使其工作,请选择工具 - 参考并选择 Microsoft XML v6.0。有很多方法可以解决这个问题,但在这种情况下,了解 XPath(SelectNodes 中使用的语言)非常有用。