Click here to Skip to main content
15,923,164 members
Articles / Programming Languages / Objective C

XMLWriter - A Simple Reusable Class

Rate me:
Please Sign up or sign in to vote.
4.86/5 (41 votes)
20 Mar 2006CPOL2 min read 96.5K   2.6K   43   14
An example for reusable code - an XML writer class


XMLwriter is a simple class that can be used in your application to create/generate XML output. All you need to do is include the xmlwriter.h and xmlwriter.cpp into your project, and enjoy.

The implementation uses only standard CPP libraries and STLs, this can be used for applications in Windows as well as Linux. I have used this in a Windows environment, Cygwin (Linux emulator), and in Linux systems. It works fine in all the three. I hope the same will be the result in other operating systems also.

This XMLWriter class doesn’t support all the features of XML but surely satisfies the basic needs you will have in most of your applications. You can use this code free of cost, but at your own risk. (Please test the application.)


  1. Easily creates nodes
  2. Easily creates elements
  3. Easily adds attributes
  4. Closes all the open tags with one simple command (Stack to keep track of all the open tags)
  5. No need to worry about file operations (All handled internally)

Features Missing

  1. No verification and validation is done on the file (User's responsibility to ensure that file is well formed and valid)
  2. Right now, provision to add processing instructions and CDATA sections are missing. This can be easily added to the XML class (if you need it).

I have organized the tutorial into three main sections:

Section 1: How to Use?

Usage is very simple and easy.

Windows Users

  1. Create a simple project in the IDE that you are using.
  2. Add the files xmlwriter.cpp and xmlwriter.h.
  3. Create a main application.
  4. Create an object of ‘xmlwriter’ and use the member functions to add nodes, elements, etc.

Linux Users

Copy the files xmlwriter.cpp and xmlwriter.h into your working directory. Create a main application, say for example, testxmlwriter.cpp. Create a make file.

#make file created by boby

CC = g++ -Wno-deprecated

XMLwriter_cygwin : xmlwriter.o testxmlwriter.o
        $(CC) xmlwriter.o testxmlwriter.o  -o XMLwriter_cygwin

xmlwriter.o : xmlwriter.cpp
        $(CC) $(CFLAGS) xmlwriter.cpp

testxmlwriter.o : testxmlwriter.cpp
        $(CC) $(CFLAGS)  testxmlwriter.cpp

        -rm -f *.o

Section 2: Example Implementation

xmlwriter MyXml("boby.xml");
//creates an object of type xmlwriter'. This object 
//is closely coupled to the xml file boby.xml.
//Whatever operation you perform on this object 
//will be reflected in the boby.xml file.
//Constructor adds the following lines to the xml files. 
//Change the constructor code if you want to
//change the encoding format.

<?xml version="1.0" encoding="UTF-8" ?>
//add an attribute "age" with value "25" into memory.
//This attribute will be added to the next tag which will be created.
//You can add any number of attributes before adding the tag.
//All the attributes will be added to the next tag created.

// add one more attribute.

// this will create a tag boby with two attributes
// "age" and "Profession".

MyXml.AddComment("Personal information");
MyXml.Createtag("Home"); // create node boby

MyXml.CreateChild("Address","Pazheparampil"); // add element

MyXml.CloseLasttag(); // close boby

MyXml.AddComment("Office information");
MyXml.Createtag("Office"); // create node boby

MyXml.CreateChild("Address","Bangalore"); // add element

MyXml.CloseLasttag(); // close Office

//This will close all the open tags. After going deep 
//into the file creating lots of XML nodes,
//you can close the all opened tags with this single function call.
//A stack has been implemented to keep track of all the open tags.

Section 3: Design Overview

Class Diagram

Sample screenshot


This XML writer class is a typical example for a reusable class. Since the class handles only XML operations, this can be easily reused in any application without any code modification.


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Written By
Software Developer (Senior) DWS
Australia Australia

Comments and Discussions

GeneralMy vote of 5 Pin
Member 766473619-Apr-11 20:15
Member 766473619-Apr-11 20:15 
GeneralThanks Pin
hnkulkarni2-Feb-10 16:58
hnkulkarni2-Feb-10 16:58 
GeneralExcellent...saves a lot of work Pin
rittjc14-May-09 4:18
rittjc14-May-09 4:18 
GeneralSome question for your code Pin
Jacky_y9-Mar-08 23:52
Jacky_y9-Mar-08 23:52 
GeneralRe: Some question for your code Pin
Boby Thomas P31-Mar-08 17:01
Boby Thomas P31-Mar-08 17:01 
Questionuse fee Pin
sarah_20085-Mar-08 20:48
sarah_20085-Mar-08 20:48 
GeneralRe: use fee Pin
Boby Thomas P31-Mar-08 16:59
Boby Thomas P31-Mar-08 16:59 
Generallicense issue Pin
nicolas_chang4-Mar-08 18:14
nicolas_chang4-Mar-08 18:14 
GeneralRe: license issue Pin
Boby Thomas P4-Mar-08 22:06
Boby Thomas P4-Mar-08 22:06 
GeneralRe: license issue Pin
nicolas_chang5-Mar-08 14:43
nicolas_chang5-Mar-08 14:43 
GeneralDOM and SAX Pin
Tina Huang20-Aug-07 20:25
Tina Huang20-Aug-07 20:25 
GeneralRe: DOM and SAX Pin
Boby Thomas P20-Aug-07 20:37
Boby Thomas P20-Aug-07 20:37 
GeneralA minor comment Pin
krivich31-Mar-06 7:12
krivich31-Mar-06 7:12 
GeneralRe: A minor comment Pin
Boby Thomas P7-May-06 1:07
Boby Thomas P7-May-06 1:07 

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.