122 lines
4.8 KiB
C++
122 lines
4.8 KiB
C++
#pragma once
|
|
|
|
/************************************************************************/
|
|
/* MS XML 를 편히 쓰기 위한 RAPPER CLASS */
|
|
/* description : DB TABLE 형식에 맞췄다.
|
|
/* date : 2006/7/12
|
|
/* creator : 조재식
|
|
/************************************************************************/
|
|
|
|
#import <msxml4.dll>
|
|
#include <string>
|
|
#include <comutil.h>
|
|
|
|
typedef MSXML2::IXMLDOMDocument2Ptr XMLDOMPtr;
|
|
typedef MSXML2::IXMLDOMProcessingInstructionPtr XMLPIPtr;
|
|
typedef MSXML2::IXMLDOMNodeListPtr NODELISTPtr;
|
|
typedef MSXML2::IXMLDOMNamedNodeMapPtr ATTRIMAPPtr; //NamedNodeMap은 주로 속성값 찾는데 사용되어서 이렇게 정의했다.
|
|
typedef MSXML2::IXMLDOMNodePtr NODEPtr;
|
|
typedef MSXML2::IXMLDOMElementPtr ELEMENTPtr;
|
|
|
|
|
|
class XMLParser
|
|
{
|
|
public:
|
|
XMLParser(void);
|
|
~XMLParser(void);
|
|
|
|
private:
|
|
XMLDOMPtr m_pDoc;
|
|
XMLPIPtr m_pPI;
|
|
|
|
_variant_t m_varData;
|
|
_variant_t m_varAttrValue;
|
|
_variant_t m_varXMLFile;
|
|
|
|
public:
|
|
BOOL Init();
|
|
BOOL Load( char* pszFile );
|
|
BOOL Save();
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 검색 함수들..
|
|
//노드 검색 함수들..
|
|
NODELISTPtr FindNodeList( BSTR strElem, long& nNodeCount );
|
|
ATTRIMAPPtr FindAttriMap( NODELISTPtr pNodeList, long nIndex );
|
|
NODEPtr FindNode( NODELISTPtr pNodeList, long nIndex );
|
|
NODELISTPtr FindChildNodeList( NODEPtr pNode, long& nNodeCount ); //현재 노드의 바로 아래 단계의 노드들의 리스트를 가져온다.
|
|
|
|
// 엘레멘트와 속성값으로 검색하는 함수들..
|
|
NODELISTPtr FindNodeListByAttr( const TCHAR* pszElem, const TCHAR* pszAttr, _variant_t var );
|
|
NODELISTPtr Query( const TCHAR* pszQuery );
|
|
NODEPtr SingleQuery( const TCHAR* pszQuery );
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 읽기 함수들..
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 엘레먼트를 얻는 함수와, 각각의 엘레먼트의 속성 값을 얻는 함수
|
|
|
|
//노드는 하나의 자료표현 단위이다.
|
|
//노드는 엘레멘트가 될수도 있고, 속성도 될수 있다.
|
|
|
|
//이름으로 속성값 얻기.(NODE)
|
|
BOOL GetAttriData( NODEPtr pNode, _bstr_t strAttriName, _bstr_t& bstrData );
|
|
BOOL GetAttriDataStr( NODEPtr pNode, _bstr_t strAttriName, std::string& strData );
|
|
BOOL GetAttriDataInt( NODEPtr pNode, _bstr_t strAttriName, int& nData );
|
|
BOOL GetAttriDataDWORD( NODEPtr pNode, _bstr_t strAttriName, DWORD& dwData );
|
|
BOOL GetAttriDataFloat( NODEPtr pNode, _bstr_t strAttriName, float& fData );
|
|
BOOL GetAttriDataBYTE( NODEPtr pNode, _bstr_t strAttriName, BYTE& byData );
|
|
BOOL GetAttriDataBOOL( NODEPtr pNode, _bstr_t strAttriName, BOOL& bData );
|
|
|
|
//속성 번호로 속성값 얻기
|
|
BOOL GetAttriData( NODEPtr pNode, long nIndex, _bstr_t& bstrData );
|
|
BOOL GetAttriDataStr( NODEPtr pNode, long nIndex, std::string& strData );
|
|
BOOL GetAttriDataInt( NODEPtr pNode, long nIndex, int& nData );
|
|
BOOL GetAttriDataDWORD( NODEPtr pNode, long nIndex, DWORD& dwData );
|
|
BOOL GetAttriDataFloat( NODEPtr pNode, long nIndex, float& fData );
|
|
BOOL GetAttriDataBYTE( NODEPtr pNode, long nIndex, BYTE& byData );
|
|
BOOL GetAttriDataBOOL( NODEPtr pNode, long nIndex, BOOL& bData );
|
|
|
|
private:
|
|
//속성 노드 값을 얻는다.
|
|
NODEPtr GetAttriNode( NODEPtr pNode, _bstr_t strAttriName );
|
|
NODEPtr GetAttriNode( NODEPtr pNode, long nIndex );
|
|
|
|
//해당 자료형의 값을 얻어온다.
|
|
BOOL GetNodeDataBSTR( NODEPtr pNode, _bstr_t& strData );
|
|
BOOL GetNodeDataStr( NODEPtr pNode, std::string& strData );
|
|
BOOL GetNodeDataInt( NODEPtr pNode, int& nData );
|
|
BOOL GetNodeDataDWORD( NODEPtr pNode, DWORD& dwData );
|
|
BOOL GetNodeDataFloat( NODEPtr pNode, float& fData );
|
|
BOOL GetNodeDataBYTE( NODEPtr pNode, BYTE& byData );
|
|
BOOL GetNodeDataBOOL( NODEPtr pNode, BOOL& bData );
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 쓰기 함수들...
|
|
public:
|
|
//속성 쓰기.
|
|
BOOL SetAttribute( ELEMENTPtr pElem, BSTR strName, _variant_t value );
|
|
BOOL SetAttributeStr( ELEMENTPtr pElem, BSTR strName, std::string strValue );
|
|
BOOL SetAttributeInt( ELEMENTPtr pElem, BSTR strName, int nValue );
|
|
BOOL SetAttributeDWORD( ELEMENTPtr pElem, BSTR strName, DWORD dwValue );
|
|
BOOL SetAttributeFloat( ELEMENTPtr pElem, BSTR strName, float fValue );
|
|
BOOL SetAttributeBYTE( ELEMENTPtr pElem, BSTR strName, BYTE byValue );
|
|
BOOL SetAttributeBOOL( ELEMENTPtr pElem, BSTR strName, BOOL bValue );
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
// 기능 함수들...
|
|
public:
|
|
ELEMENTPtr CreateElement( BSTR strNewElem );
|
|
ELEMENTPtr InsertElement( BSTR strParent, BSTR strNewElem );
|
|
BOOL RemoveElement( TCHAR* pszElem, TCHAR* pszFindAttr, _variant_t var );
|
|
BOOL UpdateElement( TCHAR* pszElem, TCHAR* pszFindAttr, _variant_t FindVar, TCHAR* pszModifyAttr, _variant_t ModifyVar );
|
|
BOOL RemoveElement( const TCHAR* pszElem );
|
|
|
|
private:
|
|
BOOL _UpdateNodeList( NODELISTPtr pNodeList, TCHAR* pszModifyAttr, _variant_t ModifyVar );
|
|
};
|