Click here to Skip to main content
15,881,757 members
Articles / Desktop Programming / MFC

Import/Export Registry Sections as XML

Rate me:
Please Sign up or sign in to vote.
4.33/5 (16 votes)
21 Jan 20033 min read 165.7K   6.1K   73  
Export registry sections as XML to simplify registry diffs
This article details a tool aimed to import/export registry sections in XML format, to make registry diff easier in practice.

#pragma once

class CFile; // forward declaration


//// xmlwriter //////////////////////////////////////////////////////////////////////
//
//
//


class XmlWriter
{
	// Members
	//
protected:
	CFile *m_pFile;
	BOOL m_bFileOpen, m_bPrototypeWritten;
	CString m_szFilename;
	int m_nLevel;

	// Constructor
public:
	XmlWriter();
	virtual ~XmlWriter();

	// Accessors
public:
	void SetIndentLevel(int n) { m_nLevel = n; }
	int GetIndentLevel() { return m_nLevel; }
	CString &GetFilename() { return m_szFilename; }

	BOOL MustBeClosed() { return m_bFileOpen; }

	// Methods
public:
	void Init();
	BOOL Open(CString &szFilename);
	virtual BOOL WriteString(CString &szData);
	BOOL Close();
};


class XmlStringWriter : public XmlWriter
{
	// Members
	//
protected:
	CString m_szContent;

	// Constructor
public:
	XmlStringWriter();
	virtual ~XmlStringWriter();

	// Accessors
public:
	void Init();
	CString &GetContent();
	virtual BOOL WriteString(CString &szData);
	BOOL Close();

};

class XmlElement
{
	// Members
	//
protected:
	CString m_szName;
	CStringArray m_szAttribNames, m_szAttribValues;

	// Constructor
public:
	XmlElement();
	XmlElement(const CString &szName);

	// Accessors
public:
	void SetName(/*in*/const CString &szName);
	void GetName(/*out*/CString &szName);
	void GetAttribName(int nIndex, /*out*/ CString &szAttribName);
	void GetAttribValue(int nIndex, /*out*/ CString &szAttribValue);
	int GetAttribCount();
	BOOL FindAttrib(/*in*/CString &szAttribName);

	// Methods
	void AddAttrib(/*in*/CString &szName, /*in*/CString &szValue);

	void Write(XmlWriter &writer, int nDeltaLevel=0, BOOL bIndent=TRUE, BOOL bEOL=TRUE); // for any kind of open tag
	void WriteEmpty(XmlWriter &writer, int nDeltaLevel=0, BOOL bIndent=TRUE, BOOL bEOL=TRUE); // for any kind of open tag
	void WritePInstruction(XmlWriter &writer, int nDeltaLevel=0); // used mainly for <?xml ... ?>
	void WriteClosingTag(XmlWriter &writer, int nDeltaLevel=0, BOOL bIndent=TRUE, BOOL bEOL=TRUE); // for tag closure

};




By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.


Written By
France France
Addicted to reverse engineering. At work, I am developing business intelligence software in a team of smart people (independent software vendor).

Need a fast Excel generation component? Try xlsgen.

Comments and Discussions