#include "StdAfx.h" #include "MBTagDocMgr.h" CMBTagDocMgr::CMBTagDocMgr(void) { m_pTagGroupMgr = new CMBTagGroupMgr(); } CMBTagDocMgr::~CMBTagDocMgr(void) { if( m_pTagGroupMgr ) { delete m_pTagGroupMgr; m_pTagGroupMgr = NULL; } } CMBTagGroupMgr *CMBTagDocMgr::GetTagGroupMgr() { return m_pTagGroupMgr; } bool CMBTagDocMgr::AddTagDocInfo(CMBTagDocInfo *pTagDocInfo) { return AddTagDocObj(pTagDocInfo); } CMBTagDocInfo* CMBTagDocMgr::GetTagDocInfo( CString strID ) { return (CMBTagDocInfo*)GetTagDocObj(strID); } bool CMBTagDocMgr::GetTagGroupVector( CMBBaseTagDocObjVector &vecotrTagDocObj,CString strGroup ) { if( strGroup == _T("δ·Ö×é±êÇ©") ) { strGroup = _T(""); } vecotrTagDocObj.clear(); CMBBaseTagDocObjVector::iterator it; CMBBaseTagDocObj *pTagDocObj = NULL; for( it = m_vecotrTagDocObj.begin();it != m_vecotrTagDocObj.end();it++ ) { pTagDocObj = *it; if( pTagDocObj->m_strGroup == strGroup ) { vecotrTagDocObj.push_back(pTagDocObj); } } return true; } CString CMBTagDocMgr::GetTags( CString strGroup ) { CString strTags; CMBBaseTagDocObjVector::iterator it; CMBBaseTagDocObj *pTagDocObj = NULL; if( strGroup == _T("δ·Ö×é±êÇ©") ) { strGroup = _T(""); } for( it = m_vecotrTagDocObj.begin();it != m_vecotrTagDocObj.end();it++ ) { pTagDocObj = *it; if( pTagDocObj->m_strGroup == strGroup ) { strTags += pTagDocObj->m_strName; strTags += _T(";"); } }// end for( it = m_mapTagDocObj.begin();it != m_mapTagDocObj.end();it++ ) return strTags; } // ½âÎö·þÎñ¶ËÊý¾Ý bool CMBTagDocMgr::ParseXml( CString strXML,CString &strErrInfo ) { if( strXML.IsEmpty() ) { strErrInfo = _T("CMBTagDocMgr::ParseXml,²ÎÊýΪ¿Õ£¡"); return false; } pugi::xml_document xmlDoc; if (!xmlDoc.load(strXML)) { return false; } pugi::xml_node form = xmlDoc.child(_T("Body")).child(_T("Tag")); for(pugi::xml_node node = form; node; node = node.next_sibling(_T("Tag"))) { CMBTagDocInfo *pTagDocInfo = new CMBTagDocInfo(); pTagDocInfo->m_strName = node.attribute(_T("Name")).value(); // ±êÇ©Ãû³Æ pTagDocInfo->m_strGroup = node.attribute(_T("Group")).value(); // ±êÇ©·Ö×éÃû³Æ pTagDocInfo->m_nFileCount = node.attribute(_T("FileCount")).as_int(); // ÎļþÊý if( !AddTagDocInfo(pTagDocInfo) ) { delete pTagDocInfo; pTagDocInfo = NULL; continue; } CMBTagGroup *pTagGroup = new CMBTagGroup(); if( pTagDocInfo->m_strGroup.IsEmpty() ) { pTagGroup->m_strGroupName = _T("δ·Ö×é±êÇ©"); }else{ pTagGroup->m_strGroupName = pTagDocInfo->m_strGroup; } if(!m_pTagGroupMgr->AddGroup(pTagGroup)) { delete pTagGroup; pTagGroup = NULL; } } return true; }