CXmlDocument

CXmlDocument - A simple class to read/write XML documents.
CXmlDocument and CXmlElement are two classes which can be used to work with XML documents.
You can parse existing XML documents or create new ones.
When a document is loaded all elements from the root tag are put into a (child) element list. If these elements have childs of their own, they're also put into a (linked) list.
This way we get a tree structure of all the elements in the document.

CXmlElement
The class CXmlElement is used to save the data of an XML element (tag name, data, attributes and child elements).

CString m_strName;// tag name
CString m_strAttributes;// attributes
CString m_strData;// data

CObList m_ChildElements;// child elements


CXmlDocument
This class encapsulates the XML document.

Member functions:

BOOL Load(LPCTSTR lpszFileName);
Loads the specified XML document into memory.

BOOL Store(LPCTSTR lpszFileName);
Store the XML document to specified filename.

BOOL Parse(LPCTSTR lpszString);
Parse the specified XML string and put elements in linked lists.

CString Generate();
Generate a XML string from all elements in linked lists.
Output is a formated XML string (including spaces and carriage return line feeds).

CXmlElement *AddElement(CXmlElement *pElement, LPCTSTR lpszName, LPCTSTR lpszData, LPCTSTR lpszAttributes);
Add a new element to document in specified level. So the new element will become a child of pElement.
The return value is a pointer to the created element.

CXmlElement *GetRootElement();
Get the root element of the XML document. This is the base element for all other elements.

CXmlElement *GetFirstChild(CXmlElement *pElement);
Get the first child of the specified CXmlElement. This call is usally followed by a call to GetNextSibling().

CXmlElement *GetNextSibling(CXmlElement *pElement);
Get the next child of the specified CXmlElement.

Example:

CXmlElement *pRoot = GetRootElement();

CXmlElement *pElement = GetFirstChild(pRoot);
while(pElement)
{
  TRACE1("%s\n", pElement->m_strName);
  pElement = GetNextSibling(pRoot);
}


CXmlElement *FindElement(CXmlElement *pElement, LPCTSTR lpszName);

Find the first occurrence of the specified tag (= lpszName). This call is usally followed by a call to FindNextElement().

CXmlElement *FindNextElement(CXmlElement *pElement);
Find the next occurrence of a previous specified tag (in FindElement() ).

Example:

CXmlElement *pRoot = GetRootElement();

CXmlElement *pElement = FindElement(pRoot, "ITEM");
while(pElement)
{
  TRACE1("%s\n", pElement->m_strName);
  pElement = FindNextElement(pRoot);
}



This example shows you how to parse an existing XML document:

Download demo executable

Download source code
This class is part of the Pablo Software Solutions MFC Extension Package - Classes Edition

Also check out my other example: MDB2XML, to learn how to create a XML document.

 

[Home] [Products] [Source Code] [Downloads] [Support]

© 2008 - Pablo Software Solutions
All rights reserved.