I want to replace data in a XML file using VBA. The XML data looks like this:
<MarkGrades>
<Grade MarkGrade="0" Label="3OP" TestBins="1,-1">0</Grade>
<Grade MarkGrade="2" Label="GOOD" TestBins="2">2</Grade <Grade>
<Grade MarkGrade="4" Label="FU" TestBins="31,3135,3136,3312,">4</Grade>
<Grade MarkGrade="3" Label="PA" TestBins="4016,4022,4029">3</Grade>
<Grade MarkGrade="5" Label="OS" TestBins="12,13,20012,20013">5</Grade>
</MarkGrades>
I want to replace data in node TestBins. If MarkGrade="4" or Label="FU" then replace data in TestBins from "2" to "something". But I can't seem to figure out how to specify that:
Dim doc As Object
Set doc = CreateObject("MSXML2.DOMDocument")
Dim isLoaded As Boolean
Dim i As Integer
Dim filePath As Variant
filePath = "C:\Users\xxxx\Desktop\Splitter\test.xml"
isLoaded = doc.Load(filePath)
i = 0
If isLoaded Then
Dim Grade As msxml2.IXMLDOMNodeList
Set Grade = doc.getElementsByTagName("Grade")
Dim attr As msxml2.IXMLDOMAttribute
Dim node As msxml2.IXMLDOMElement
For Each node In Grade
For Each attr In node.Attributes
If attr.Name = "TestBins" Then
i = i + 1
If i = 3 Then
attr.Value = SplitterMark.TextBox3.Value
ElseIf i = 4 Then
attr.Value = SplitterMark.TextBox4.Value
ElseIf i = 5 Then
attr.Value = SplitterMark.TextBox5.Value
End If
End If
Next attr
Next node
I tried to count if found TestBins count +1
That is working good. But can use with only this file because other file it is not common. like this:
<MarkGrades>
<Grade MarkGrade="5" Label="OS" TestBins="12,13,20012,20013">5</Grade>
<Grade MarkGrade="0" Label="3OP" TestBins="1,-1">0</Grade>
<Grade MarkGrade="4" Label="FU" TestBins="31,3135,3136,3312,">4</Grade>
<Grade MarkGrade="2" Label="GOOD" TestBins="2">2</Grade <Grade>
<Grade MarkGrade="3" Label="PA" TestBins="4016,4022,4029">3</Grade>
</MarkGrades>
Any ideas?
TestBins = node.Attributes.getNamedItem("ID").TextYou can then use those values to determine how to handle eachnode