Rupert Kruger

Rupert Kruger

  • NA
  • 1
  • 2.5k

XML Problems...changing values in a List (Of XMLElement)

Jul 12 2010 6:17 AM
I'm having problems with using XML in my program...
First of all, I'm using Visual Basic Express 2008.
I have an XML document such as the following:

<?xml version='1.0'?>
<AvailableTests>
<TestItem Name="Test1">
<Description>
Test Description
</Description>
<Parameters>
<Param Name="First Parameter" Type="Textbox">
0000000000
</Param>
<Param Name="Second Parameter" Type="Textbox">
0000000000
</Param>
<Param Name="Third Parameter" Type="FileLocation">
c:\My Documents\File.txt
</Param>
</Parameters>
</TestItem>
<TestItem Name="Test2">
<Description>
Test2's description
</Description>
<Parameters>
<Param Name="First Parameter" Type="Textbox">
0000000000
</Param>
<Param Name="Second Parameter" Type="Textbox">
0000000000
</Param>
<Param Name="Third Parameter" Type="FileLocation">
c:\My Documents\File.txt
</Param>
<Param Name="Fourth Parameter" Type="Checkbox">
checked
</Param>
</Parameters>
</TestItem>
</AvailableTests>
In my program, I load each TestItem (along with it's innerXML) as an XMLElement into a list(Of XMLElement).

dim TestItems as new List(of XMLElement)


Dim doc As XmlDocument = New XmlDocument
doc.Load(filename)
Dim nodeList As XmlNodeList = doc.GetElementsByTagName("TestItem")

For Each elem As XmlElement In nodeList
TestItems.Add(elem)
Next

For Each elem As XmlElement In nodeList
TestItems.Add(elem)
Next
Typically the above code loads XMLElements into the List (two of each). Now, whenever I try to change, say, the innertext of the third param, it changes the innertext of the third param for both items (that is the same) in the list!

Dim thisNode As XmlElement = TestItem(index)
Dim nodeList As XmlNodeList = thisNode.GetElementsByTagName("Parameters")

For Each elem As XmlElement In nodeList
If elem.HasChildNodes Then
For Each child As XmlElement In elem
If child.GetAttribute("Name") = "Third Parameter" Then
child.InnerText = Dlog.FileName
End If
Next
End If
Next

Even by changing thisNode - without assigning its values back to TestItem(index), innertext values for third param of both items in the list has changed to Dlog.FileName. The above is my latest attempt. I have also triedthe following - with the same results

 

Campaign(currentCampaign).SelectSingleNode("//Parameters/Param[@Name='Third Parameter']").InnerText = Dlog.FileName
I do not know how to get around it...

Any help will be appreciated.