Click here to Skip to main content
11,930,449 members (61,982 online)
Click here to Skip to main content
Add your own
alternative version


53 bookmarked

Save Application Settings to XML

, 16 Sep 2002
Rate this:
Please Sign up or sign in to vote.
An easy to use class that reads, writes and deletes app settings to an XML file.


Why another application settings XML class?

  1. Because INI files are so Win16.
  2. The registry is too big and you could really screw something up messing with it.
  3. XML seems to be the popular choice.

See Read and Write application parameters in XML for better reasons.

This class should make it easy to read, write and delete application settings to an XML file using the familiar registry key/value nomenclature (ex. "MyApp\Appearance\Font\Face"). If it doesn't make it easy, um... I didn't write it.

The CXMLSettings Class

To use the class, there are only 6 methods you will need to worry about.

  • void SetSettingsFile(CString cstrFile)
    • Sets the path and filename for the XML settings file.
  • long GetSettingLong(CString cstrBaseKeyName, CString cstrValueName, long lDefaultValue)
    • Returns a long value extracted from the settings file given a key and value name.
  • long SetSettingLong(CString cstrBaseKeyName, CString cstrValueName, long lValue)
    • Sets a long value in the settings file given a key and value name.
  • CString GetSettingString(CString cstrBaseKeyName, CString cstrValueName, CString cstrDefaultValue)
    • Returns a string value extracted from the settings file given a key and value name.
  • long SetSettingString(CString cstrBaseKeyName, CString cstrValueName, CString cstrValue)
    • Sets a string value in the settings file given a key and value name.
  • BOOL DeleteSetting(CString cstrBaseKeyName, CString cstrValueName)
    • Deletes a key or value from the settings file given a key and value name.

Other methods in the class parse key/value "chains", and load, save, and traverse the settings file.

How to Use It

  1. Call SetSettingsFile to tell the class where the XML file will be saved.
  2. Call one of the Get, Set or Delete methods using the registry-like nomenclature for the first parameter (ex. "MyApp\Appearance\Font"). A default value may also be sent as the last parameter to the Get methods.
  3. The DeleteSetting method can be used to delete an entire key or a value under a key.

That's it!

If the XML file does not exist or if a key/value does not exist, the Set methods will create it and the Get methods will return the default value.


The class and the demo app use MFC and MSXML 4.0. Please let me know if you find any bugs are would like to see improvements.

Other articles lie this one:


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Jason Henderson
United States United States
I have been a professional developer since 1996. I live in the middle of no where in Illinois, USA. I am married and have four children.

You may also be interested in...

Comments and Discussions

GeneralWhy DOM Pin
YoSilver16-Sep-02 6:02
memberYoSilver16-Sep-02 6:02 
GeneralRe: Why DOM Pin
Jason Henderson16-Sep-02 9:21
memberJason Henderson16-Sep-02 9:21 
GeneralXML vs. Registry Pin
Paul A. Howes16-Sep-02 4:38
memberPaul A. Howes16-Sep-02 4:38 
GeneralRe: XML vs. Registry Pin
Jason Henderson16-Sep-02 4:49
memberJason Henderson16-Sep-02 4:49 
GeneralRe: XML vs. Registry Pin
Paul A. Howes16-Sep-02 7:50
memberPaul A. Howes16-Sep-02 7:50 
GeneralRe: XML vs. Registry Pin
Jason Henderson16-Sep-02 9:25
memberJason Henderson16-Sep-02 9:25 
GeneralRe: XML vs. Registry Pin
Rui Jiang13-Dec-02 10:20
memberRui Jiang13-Dec-02 10:20 
GeneralRe: XML vs. Registry Pin
Daniel Desormeaux17-Sep-02 4:59
memberDaniel Desormeaux17-Sep-02 4:59 
> The registry is too big, cumbersome and dangerous to have your clients
> playing with when they call in for tech support.

Maybe the solution to this is to store your settings in the registry as usual, but add a button somewhere in your program labeled "Export Program Settings" (part of, say, a dialog box called by a Tech Support button in the About box, like the Office apps).

Have this button create a simple .REG file that your users can email back to you... Doesn't RegEdit even have some command-line parameter to export a subkey in a non-interactive mode (no UI)? That's what I'm thinking but for some reason I can't find the docs right now...if that's the case, that'd be just a matter of spawning RegEdit from your own program, so that'd be, what, two lines to write? and (you'd assume!) bug-free from the start. Reimporting the file if necessary would be just as easy.

Just to add to the conversation, I'd have to agree with going against XML for storing program settings; for one thing, a *big* assumption is that the proper DLLs are already installed on the client machine...if the program you're writing isn't already using XML for some reason, why drag along the entire redistribution package just for storing the program settings? But if you already have another reason for using XML in your program, fine, but as others have pointed out, you may run into multi-user/multi-location problems. Using the \AppData directory is an idea, but then what are you going to fall back to on OSes that didn't even have that directory? Heck, even My Documents didn't exist on 95.

While I don't disagree that sometimes you need to have program settings forwarded to tech support, I don't believe XML is really the answer. I don't want to discredit Jason or undermine his efforts, so I'll say this much--the article is providing a very decent intro to XML manipulation in C++. So, thanks!

- DanielD

GeneralRe: XML vs. Registry Pin
Jason Henderson17-Sep-02 5:07
memberJason Henderson17-Sep-02 5:07 
GeneralRe: XML vs. Registry Pin
Tim Smith16-Sep-02 5:02
memberTim Smith16-Sep-02 5:02 
GeneralRe: XML vs. Registry Pin
Jason Henderson16-Sep-02 5:06
memberJason Henderson16-Sep-02 5:06 
GeneralRe: XML vs. Registry Pin
Paul A. Howes16-Sep-02 7:57
memberPaul A. Howes16-Sep-02 7:57 
GeneralRe: XML vs. Registry Pin
Jason Henderson16-Sep-02 9:38
memberJason Henderson16-Sep-02 9:38 
GeneralRe: XML vs. Registry Pin
Anonymous16-Sep-02 10:56
sussAnonymous16-Sep-02 10:56 
GeneralRe: XML vs. Registry Pin
Houdini17-Sep-02 6:16
memberHoudini17-Sep-02 6:16 
GeneralRe: XML vs. Registry Pin
Paul A. Howes17-Sep-02 7:43
memberPaul A. Howes17-Sep-02 7:43 
GeneralRe: XML vs. Registry Pin
Houdini17-Sep-02 8:39
memberHoudini17-Sep-02 8:39 
GeneralWhy XML Pin
Chris Holt15-Sep-02 15:06
sussChris Holt15-Sep-02 15:06 
GeneralRe: Why XML Pin
Maximilien15-Sep-02 15:17
memberMaximilien15-Sep-02 15:17 
GeneralRe: Why XML Pin
Tim Kosse15-Sep-02 21:41
memberTim Kosse15-Sep-02 21:41 
GeneralRe: Why XML Pin
mstephens16-Sep-02 0:31
membermstephens16-Sep-02 0:31 
GeneralRe: Why XML Pin
Jiminy15-Sep-02 18:12
memberJiminy15-Sep-02 18:12 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.151126.1 | Last Updated 17 Sep 2002
Article Copyright 2002 by Jason Henderson
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid