|
// XMLHelper.h: Definition of the CXMLHelper class
/**********************************************************************************
//
// Copyright (C) Dhandapani Ammasai (dammasai@yahoo.com)
//
// This code can be freely used or modified for non commercial use provided that
// a) this copyright notice and license appear on all copies of the software;
//
**********************************************************************************/
#ifndef _XML_HELPER_H_
#define _XML_HELPER_H_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "resource.h" // main symbols
#import "msxml.dll"
/////////////////////////////////////////////////////////////////////////////
// CXMLHelper
class CXMLHelper
{
public:
//Data Members
CComPtr<MSXML::IXMLDOMDocument> m_pXMLDOMDoc;
enum eXMLNodeType //enum to indicate node type
{
NODE_START,
NODE_VALUE,
NODE_END,
ATTRIBUTE,
END
};
struct XMLNodeVarMap
{
_bstr_t szName; //Node name
VARTYPE vt; //Datatype
void* pVar; //Variable to hold node value
};
struct XMLNodeData //describes xml data
{
eXMLNodeType eNodeType; // Node Type
_bstr_t szName; //Node name
VARIANT vValue; //Node value
};
public:
//Methods
//
//Constructor
CXMLHelper();
//Destructor
~CXMLHelper();
//Adds a single node to pXMLCurNode
MSXML::IXMLDOMNodePtr AddNode(XMLNodeData XMLDataSet,MSXML::IXMLDOMNodePtr pXMLCurNode);
//Static method which removes all nodes from the XML DOM
static void Empty(MSXML::IXMLDOMDocument* pDOM);
//Removes all nodes from the XML DOM
void Empty();
};
//Macros
//Start XML tree
#define START_XML()\
CXMLHelper::XMLNodeData stNodeData;\
VARIANT vNodeVal;
//end XML tree
#define END_XML() \
stNodeData.eNodeType = CXMLHelper::END;\
stNodeData.szName = "";\
stNodeData.vValue.vt = VT_EMPTY;\
pXMLCurNode = pXMLHelperObj->AddNode(stNodeData,pXMLCurNode);
//Start a xml element
#define START_XML_ELEMENT(Name) \
stNodeData.eNodeType = CXMLHelper::NODE_START;\
stNodeData.szName = Name;\
stNodeData.vValue.vt = VT_EMPTY;\
pXMLCurNode = pXMLHelperObj->AddNode(stNodeData,pXMLCurNode);
//end xml element
#define END_XML_ELEMENT() \
stNodeData.eNodeType = CXMLHelper::NODE_END;\
stNodeData.szName = "";\
stNodeData.vValue.vt = VT_EMPTY;\
pXMLCurNode = pXMLHelperObj->AddNode(stNodeData,pXMLCurNode);
#define XML_ELEMENT_STR(Name, Value)\
START_XML_ELEMENT(Name)\
XML_NODEVALUE_STR(Value)\
END_XML_ELEMENT()
#define XML_ELEMENT_LONG(Name, Value)\
START_XML_ELEMENT(Name)\
XML_NODEVALUE_LONG(Value)\
END_XML_ELEMENT()
#define XML_NODEVALUE_STR(Value) \
{\
stNodeData.eNodeType = CXMLHelper::NODE_VALUE;\
stNodeData.szName = "";\
VariantInit(&vNodeVal);\
vNodeVal.vt = VT_BSTR;\
CComBSTR szTempValue = Value;\
vNodeVal.bstrVal = szTempValue.Copy();\
stNodeData.vValue = vNodeVal;\
pXMLCurNode = pXMLHelperObj->AddNode(stNodeData,pXMLCurNode);\
}
#define XML_NODEVALUE_LONG(Value) \
{\
stNodeData.eNodeType = CXMLHelper::NODE_VALUE;\
stNodeData.szName = "";\
VariantInit(&vNodeVal);\
vNodeVal.vt = VT_I4;\
vNodeVal.lVal = Value;\
stNodeData.vValue = vNodeVal;\
pXMLCurNode = pXMLHelperObj->AddNode(stNodeData,pXMLCurNode);\
}
#define XML_DECLARE_NODE_VAR_MAP(x)\
long lNodeCount;\
CXMLHelper::XMLNodeVarMap stNodeVarMap[x];
#define XML_NODE_VAR_MAP_COUNT lNodeCount
#define XML_NODE_VAR_MAP(NodeName,VarType,pVariable)\
stNodeVarMap[lNodeCount].szName = _bstr_t(NodeName);\
stNodeVarMap[lNodeCount].vt = VarType;\
stNodeVarMap[lNodeCount++].pVar = pVariable;
#define START_XML_NODE_VAR_MAP()\
lNodeCount = 0;
#define END_XML_NODE_VAR_MAP()
#define XML_NODEDATA(x)\
stNodeData[x]
#define XML_HELPER(pXMLHelper)\
CXMLHelper* pXMLHelperObj = pXMLHelper;
#define XML_SET_CURRENTNODE(pCurNode)\
MSXML::IXMLDOMNodePtr pXMLCurNode = pCurNode;
#define XML_GET_CURRENTNODE pXMLCurNode
#define XML_NODEVARMAP_STRUCT stNodeVarMap
#endif
|
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.
Dhandapani Ammasai(Dan in short) is a software delivery manager at a top tier IT company in India.