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

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

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…
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
With the power of JIRA, there's an unlimited number of ways you can customize it, use it and benefit from it. With that in mind, there's bound to be things that I wasn't able to cover in this course. With this summary we'll look at some places to go…
Learn how to create flexible layouts using relative units in CSS.  New relative units added in CSS3 include vw(viewports width), vh(viewports height), vmin(minimum of viewports height and width), and vmax (maximum of viewports height and width).

863 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

Need Help in Real-Time?

Connect with top rated Experts

26 Experts available now in Live!

Get 1:1 Help Now