Update XML file with VBScript

I am trying to use an XML file as a sort of ini file for a vbscript hta I am writing. I am new to writing/reading xml so I found some code on here to read xml in to variables. I figured out how to use it the code for what I need, and now I am trying to figure out how to save data back to the xml file.  

I've added the code from my xml file and config file  to show what I am doing.  What I assistance with is, for example, if someone changes the oldfiles variable to c:\old  it will save that back to the oldfiles element in the xml file.   Thanks !
The vbscript: (also attached as vbscript.txt)
Dim xml_oldfiles, xml_dhcpserver,xml_dc,xml_domain,xml_dadmin,xml_ladmin,xml_docsdest
Dim oXml
Set oXml = CreateObject("Msxml2.DOMDocument")
oXml.async = False
Dim oNodeList, oNode
Set oNodeList = oXml.selectNodes("/helionizer/config")
For Each oNode in oNodeList
     xml_oldfiles = ProtectedGet(oNode.selectSingleNode("oldfiles"))
     xml_dc = ProtectedGet(oNode.selectSingleNode("dc"))
     xml_domain = ProtectedGet(oNode.selectSingleNode("domain"))
     xml_dadmin = ProtectedGet(oNode.selectSingleNode("dadmin"))
msgbox (xml_oldfiles & " " & xml_dc & " " & xml_domain & " " & xml_dadmin)  
Function ProtectedGet(ByVal voNode)
	If not voNode Is Nothing Then ProtectedGet = voNode.text
End Function
The xml: (also attached as config.txt)

Open in new window

Who is Participating?
jwarnkenConnect With a Mentor Commented:
here is a sample that I use to update xml
ConfigXML = "D:\Repository.xml"
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.Async = "False"
Set colMfiles = xmlDoc.selectNodes("/Repository/ManagedFiles/File[@Type='CallIn']")
For Each t In colMfiles
	WScript.Echo "Current test for Lane is : " & t.text
	If t.text <> "C:\program files\Test.xml" Then
		WScript.Echo "Updating Menusys for CallIn Lane"
		t.text = "C:\program files\Test.xml"
		WScript.Echo "No Update needed for test Lane"
	End If 
WScript.Echo "Adding/updating test lane to rcpt_fuel"
Set oRoot = xmlDoc.selectSingleNode("/Repository/ManagedFiles/rcpt_fuel/File[@Type='CallIn']")
if oRoot is nothing Then
	WScript.Echo "CallIn was not defined adding node to xml"
	Set newRoot = xmlDoc.selectSingleNode("/Repository/ManagedFiles/rcpt_fuel")
	Set oRoot = xmlDoc.createElement("File")
	oRoot.text = "C:\program files\Data\rcpt_fuel.bmp.qsr"
	set objAttr = xmlDoc.createAttribute("Type")
	objAttr.Text = "CallIn"
	Call oRoot.attributes.setnamedItem( objAttr )
	WScript.Echo "CallIn was found."
	If oRoot.text <> "C:\program files\Data\rcpt_fej_tfuel.bmp.qsr" Then
		WScript.Echo "Updating rcpt_fuel.bmp for CallIn lane."
		oRoot.text = "C:\program files\Data\rcpt_fej_tfuel.bmp.qsr"
		WScript.Echo "No updated needed for rcpt_fuel.bmp for CallIn lane."
	End If 
end If
WScript.Echo "Saving File"

Open in new window

heliontechAuthor Commented:
Ahhh ok I think I was missing that I had to set it.  I tried the code I have now and it worked perfectly.  Is the way I have it going to be the best way to go about it ?  Just setting a variable to the xml element updating the text and then moving on to the next ?   I just want to make sure it doesn't bog down my script if I have to change say 30 elements.

sub saveconfig
Dim oXml
Set oXml = CreateObject("Msxml2.DOMDocument")
oXml.async = False
Set oldfiles_xml = oXml.selectsingleNode("/helionizer/config/oldfiles")
oldfiles_xml.text = "C:\oldfiles2"
end sub

Open in new window

You are selecting the node and not looping to find it so you should be ok. There may be a more efficient way but unless you are doing 1000s of updates I think you will be ok
heliontechAuthor Commented:
Thanks !
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.