Update XML file with VBScript

Posted on 2009-06-29
Last Modified: 2012-08-14
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

Question by:heliontech
  • 2
  • 2

Accepted Solution

jwarnken earned 500 total points
ID: 24737338
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


Author Comment

ID: 24737999
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"".\config.xml")
end sub

Open in new window


Expert Comment

ID: 24738478
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

Author Closing Comment

ID: 31597948
Thanks !

Featured Post

Webinar: Aligning, Automating, Winning

Join Dan Russo, Senior Manager of Operations Intelligence, for an in-depth discussion on how Dealertrack, leading provider of integrated digital solutions for the automotive industry, transformed their DevOps processes to increase collaboration and move with greater velocity.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This article is the result of a quest to better understand Task Scheduler 2.0 and all the newer objects available in vbscript in this version over  the limited options we had scripting in Task Scheduler 1.0.  As I started my journey of knowledge I f…
The Confluence of Individual Knowledge and the Collective Intelligence At this writing (summer 2013) the term API ( has made its way into the popular lexicon of the English language.  A few years ago, …
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…
How to Install VMware Tools in Red Hat Enterprise Linux 6.4 (RHEL 6.4) Step-by-Step Tutorial

685 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question