Listing 1: xmlif.h Interface to CXmlIF
/*** * MODULE: XmlIF.h * PURPOSE: Interface...XML Interface Class * AUTHOR: Ben Campione ***/ #ifndef _CXMLIF_ #define _CXMLIF_ // #define _MS_XML2_ // Define import spec for MS XML DLL #ifdef _MS_XML2_ // Import One Of The MS XML DLLs #import "msxml3.dll" named_guids raw_interfaces_only #define MS_XML_NS MSXML2 // Define Name Space For MSXML2 #define XML_LOAD load #define XML_CRP createProcessingInstruction #define XML_APPCHILD appendChild #define XML_SELNODES selectNodes #define XML_CRTNODE createNode #define XML_CRTATTR createAttribute #define XML_GETNI getNamedItem #define XML_SETNI setNamedItem #else #import "msxml.dll" named_guids raw_interfaces_only #define MS_XML_NS MSXML // Define Name Space For MSXML #define XML_LOAD raw_load #define XML_CRP raw_createProcessingInstruction #define XML_APPCHILD raw_appendChild #define XML_SELNODES raw_selectNodes #define XML_CRTNODE raw_createNode #define XML_CRTATTR raw_createAttribute #define XML_GETNI raw_getNamedItem #define XML_SETNI raw_setNamedItem #endif const int XIF_MAX_STRING = 255; class CXmlIF // CXmlIF Class Interface { private: bool m_bInitialized; bool m_bLoaded; char m_szURL[_MAX_PATH+1]; char m_szErrReason[XIF_MAX_STRING+1]; long m_lErrLine; long m_lErrPos; HRESULT m_hr; MS_XML_NS::IXMLDOMDocument* m_pDoc; MS_XML_NS::IXMLDOMNode* m_pDocNode; public: CXmlIF() { Initialize(); } ~CXmlIF() { UnInitialize(); } private: HRESULT CheckLoad(MS_XML_NS::IXMLDOMDocument* pDoc); void GetParseError(MS_XML_NS::IXMLDOMParseError *pXMLError); void ClearParseError(void); void AppendAttribute(MS_XML_NS::IXMLDOMNode* pNode, MS_XML_NS::IXMLDOMAttribute* pAttr); public: bool Initialize(void); void UnInitialize(void); bool LoadDocument(const char* szURL); bool SaveDocument(const char* szURL); bool SetDocumentNode(void); bool InsertProcessingInst(void); BSTR AsciiToBSTR(const char* pszString); char* BSTRToAscii(const BSTR pwszString); bool GetName(MS_XML_NS::IXMLDOMNode* pNode, BSTR pBName, UINT uSize); bool SetText(MS_XML_NS::IXMLDOMNode* pNode, BSTR pBText); bool GetText(MS_XML_NS::IXMLDOMNode* pNode, BSTR pBText, UINT uSize); bool SetValue(MS_XML_NS::IXMLDOMNode* pNode, BSTR pBValue); bool GetValue(MS_XML_NS::IXMLDOMNode* pNode, BSTR pBValue, UINT uSize); MS_XML_NS::IXMLDOMNodeList* GetChildren(MS_XML_NS::IXMLDOMNode* pNode, const BSTR pBName = NULL, long* pCnt = NULL); MS_XML_NS::IXMLDOMNode* GetChild(MS_XML_NS::IXMLDOMNode* pNode, const BSTR pBNodeName, UINT uOccurance); MS_XML_NS::IXMLDOMNode* GetChild(MS_XML_NS::IXMLDOMNodeList* pList, const long lItem); MS_XML_NS::IXMLDOMNode* CreateChild(MS_XML_NS::IXMLDOMNode* pNode, const BSTR pBName, int nType = MS_XML_NS::NODE_ELEMENT); MS_XML_NS::IXMLDOMNamedNodeMap* CXmlIF::GetAttributeList( MS_XML_NS::IXMLDOMNode* pNode, long* pCnt); MS_XML_NS::IXMLDOMNode* GetAttribute(MS_XML_NS::IXMLDOMNode* pNode, const BSTR pBName); MS_XML_NS::IXMLDOMNode* GetAttribute(MS_XML_NS::IXMLDOMNamedNodeMap* pAttrs, long lIndex); MS_XML_NS::IXMLDOMAttribute* CreateAttribute(MS_XML_NS::IXMLDOMNode* pNode, const BSTR pBName, const BSTR pBValue); bool SetAttributeValue(MS_XML_NS::IXMLDOMNode* pNode, const BSTR pBName, BSTR pBValue); bool GetAttributeValue(MS_XML_NS::IXMLDOMNode* pNode, const BSTR pBName, BSTR pBValue, UINT uSize); inline MS_XML_NS::IXMLDOMDocument* GetDocument(void) { return m_pDoc; } inline MS_XML_NS::IXMLDOMNode* GetDocumentNode(void) { return m_pDocNode; } inline bool IsInitialized(void) { return m_bInitialized; } inline bool IsLoaded(void) { return m_bLoaded; } inline const char* GetURL(void) { return m_szURL; } inline const char* GetErrReason(void) { return m_szErrReason; } inline long GetErrLine(void) { return m_lErrLine; } inline long GetErrPos(void) { return m_lErrPos; } }; #endif //End of File