zoukankan      html  css  js  c++  java
  • CConfigXmlFile02

    CConfigXmlFile02.h

    #pragma once

    #import <msxml6.dll> // raw_interfaces_only,named_guiIDs
    using namespace MSXML2;

    #include <vector>
    using namespace std;

    class CConfigXmlFile02
    {
    public:
    CConfigXmlFile02(void);
    virtual ~CConfigXmlFile02(void);
    CConfigXmlFile02(CString path);

    protected:
    bool InitDoc(void);



    public:
    int GetNodeAttTextArr(LPCTSTR lpszItem, LPCTSTR lpszAtt, vector<CString> vecData);
    int GetNodeTextArr(LPCTSTR lpszItem, LPCTSTR lpszAtt, vector<CString> &vecData);
    int GetNodeIntArr(LPCTSTR lpszItem, LPCTSTR lpszAtt, vector<int> &vecData);
    int GetNodeChildNoteCount(LPCTSTR lpszItem);

    // unit get
    CString GetNodeText(LPCTSTR lpszItem);
    INT GetNodeInt(LPCTSTR lpszItem);
    INT GetNodeRGB(LPCTSTR lpszItem);


    // arr get
    int SetNodeTextArr(LPCTSTR lpszItem, LPCTSTR lpszSubItem, vector<CString> vecData);

    // unit set
    BOOL SetNodeText(LPCTSTR lpszItem, LPCTSTR lpszText);
    BOOL SetNodeInt(LPCTSTR lpszItem, int nData);

    private:
    CString m_filepath;
    MSXML2::IXMLDOMDocument2Ptr m_spReadPrjDoc;

    protected:
    int RemoveChildNode(void);
    };

    CConfigXmlFile02.cpp

    #include "stdafx.h"
    #include "ConfigXmlFile02.h"

    #import <msxml6.dll> // raw_interfaces_only,named_guids
    using namespace MSXML2;


    CConfigXmlFile02::CConfigXmlFile02(void)
    {
    }

    CConfigXmlFile02::CConfigXmlFile02(CString path)
    {
    m_filepath = path;
    InitDoc();
    }

    CConfigXmlFile02::~CConfigXmlFile02(void)
    {
    }


    bool CConfigXmlFile02::InitDoc(void)
    {
    //read inf.xml
    HRESULT hResult;
    // Create the COM DOM Document object

    hResult = CoInitialize(NULL);
    hResult = m_spReadPrjDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
    if FAILED(hResult)
    {
    m_spReadPrjDoc=NULL;
    return false;
    }
    m_spReadPrjDoc->async = VARIANT_FALSE;
    hResult = m_spReadPrjDoc->load((_variant_t)m_filepath);
    if (hResult != VARIANT_TRUE)
    {
    m_spReadPrjDoc=NULL;
    return false;
    }

    return true;
    }

    CString CConfigXmlFile02::GetNodeText(LPCTSTR lpszItem)
    {
    // 返回以秒为单位
    USES_CONVERSION;
    CString strItem(lpszItem);
    BSTR bstrItem = ::_com_util::ConvertStringToBSTR(T2A(strItem.GetBuffer(0)));

    // read content and attribute
    MSXML2::IXMLDOMNodePtr spNode;
    if(m_spReadPrjDoc)
    {
    BSTR bstrContent;
    spNode = m_spReadPrjDoc->selectSingleNode(bstrItem);
    spNode->get_text(&bstrContent);
    CString Propath(::_com_util::ConvertBSTRToString(bstrContent));
    return Propath;
    }
    else
    {
    return _T("");
    }
    }

    BOOL CConfigXmlFile02::SetNodeText(LPCTSTR lpszItem, LPCTSTR lpszText)
    {
    // 返回以秒为单位
    USES_CONVERSION;
    CString strItem(lpszItem);
    BSTR bstrItem = ::_com_util::ConvertStringToBSTR(T2A(strItem.GetBuffer(0)));

    // read content and attribute
    MSXML2::IXMLDOMNodePtr spNode;
    if(m_spReadPrjDoc)
    {
    BSTR bstrContent = ::_com_util::ConvertStringToBSTR(T2A(lpszText));

    spNode = m_spReadPrjDoc->selectSingleNode(bstrItem);
    spNode->put_text(bstrContent);


    m_spReadPrjDoc->save((_variant_t)m_filepath);//节点处理函数

    return TRUE;
    }
    else
    {
    return FALSE;
    }
    }

    BOOL CConfigXmlFile02::SetNodeInt(LPCTSTR lpszItem, int nData)
    {
    CString sData;
    sData.Format(_T("%d"), nData);

    return SetNodeText(lpszItem, (LPCTSTR)sData);
    }

    int CConfigXmlFile02::GetNodeChildNoteCount(LPCTSTR lpszItem)
    {
    USES_CONVERSION;
    CString strItem(lpszItem);
    BSTR bstrItem = ::_com_util::ConvertStringToBSTR(T2A(strItem.GetBuffer(0)));

    // read content and attribute
    MSXML2::IXMLDOMNodePtr spNode;
    if(m_spReadPrjDoc)
    {
    spNode = m_spReadPrjDoc->selectSingleNode(bstrItem);

    MSXML2::IXMLDOMNodeListPtr spGroupsList=spNode->childNodes;
    if(spGroupsList)
    {
    int lListLength=spGroupsList->Getlength();
    return lListLength;
    }
    else
    {
    return 0;
    }
    }
    else
    {
    return 0;
    }

    return 0;
    }


    INT CConfigXmlFile02::GetNodeInt(LPCTSTR lpszItem)
    {
    CString strContent = GetNodeText(lpszItem);
    if (strContent==_T(""))
    return 0;
    else
    {
    INT iContent = _ttoi(strContent.GetBuffer(0));
    return iContent;
    }
    }

    INT CConfigXmlFile02::GetNodeRGB(LPCTSTR lpszItem)
    {
    CString strItem(lpszItem);
    CString strRItem = strItem + _T("//red");
    CString strGItem = strItem + _T("//green");
    CString strBItem = strItem + _T("//blue");

    int r,g,b;
    r = GetNodeInt(strRItem);
    g = GetNodeInt(strGItem);
    b = GetNodeInt(strBItem);

    return RGB(r, g, b);
    }

    int CConfigXmlFile02::GetNodeAttTextArr(LPCTSTR lpszItem, LPCTSTR lpszAtt, vector<CString> vecData)
    {
    USES_CONVERSION;

    CString strItem(lpszItem);
    CString strAttributeName(lpszAtt);

    BSTR bstrItem = ::_com_util::ConvertStringToBSTR(T2A(strItem.GetBuffer(0)));

    // read content and attribute
    MSXML2::IXMLDOMNodePtr spNode;
    if(m_spReadPrjDoc)
    {
    BSTR bstrContent;
    spNode = m_spReadPrjDoc->selectSingleNode(bstrItem);
    if(spNode)
    {
    MSXML2::IXMLDOMNodeListPtr spGroupsList;
    spGroupsList=spNode->childNodes;
    if(spGroupsList)
    {
    int lListLength=spGroupsList->Getlength();
    UINT max = (UINT)lListLength;
    for (UINT i=0;i<max;i++)
    {
    MSXML2::IXMLDOMNodePtr subnode = NULL;
    spGroupsList->get_item(i, &subnode);

    if (subnode)
    {
    // attribute
    VARIANT varValue;
    MSXML2::IXMLDOMNamedNodeMapPtr attributeMap = NULL;

    subnode->get_attributes(&attributeMap);
    MSXML2::IXMLDOMNodePtr pIXMLDOMNode = attributeMap->getNamedItem(strAttributeName.AllocSysString());
    pIXMLDOMNode->get_nodeValue(&varValue);

    CString AttContent(::_com_util::ConvertBSTRToString(varValue.bstrVal));
    vecData.push_back(AttContent);
    }
    }

    return max;
    }
    }

    return 0;
    }
    else
    {
    return 0;
    }
    }

    int CConfigXmlFile02::GetNodeTextArr(LPCTSTR lpszItem, LPCTSTR lpszAtt, vector<CString> &vecData)
    {
    USES_CONVERSION;

    CString strItem(lpszItem);
    CString strAttributeName(lpszAtt);

    BSTR bstrItem = ::_com_util::ConvertStringToBSTR(T2A(strItem.GetBuffer(0)));

    // read content and attribute
    MSXML2::IXMLDOMElementPtr spElem;
    MSXML2::IXMLDOMNodePtr spParentNode;
    MSXML2::IXMLDOMNodePtr spNode;
    if(m_spReadPrjDoc)
    {
    BSTR bstrContent;
    spNode = m_spReadPrjDoc->selectSingleNode(bstrItem);
    if(spNode)
    {
    MSXML2::IXMLDOMNodeListPtr spGroupsList;
    spGroupsList=spNode->childNodes;


    if(spGroupsList)
    {
    // read
    vecData.clear();
    int lListLength=spGroupsList->Getlength();
    for (int i=0 ;i<lListLength ;i++)
    {
    MSXML2::IXMLDOMNodePtr subnode = NULL;
    spGroupsList->get_item(i, &subnode);
    subnode->get_text(&bstrContent);

    CString Content(::_com_util::ConvertBSTRToString(bstrContent));
    vecData.push_back(Content);
    }

    return lListLength;
    }
    }

    return 0;
    }
    else
    {
    return 0;
    }
    }

    int CConfigXmlFile02::GetNodeIntArr(LPCTSTR lpszItem, LPCTSTR lpszAtt, vector<int> &vecData)
    {
    vecData.clear();

    vector<CString> vecString;
    int res = GetNodeTextArr( lpszItem, lpszAtt, vecString);
    for (int i=0; i<vecString.size(); i++)
    {
    CString stemp = vecString.at(i);
    int ntemp = _ttoi(stemp.GetBuffer(0));
    vecData.push_back(ntemp);
    }

    return res;

    }
    int CConfigXmlFile02::SetNodeTextArr(LPCTSTR lpszItem, LPCTSTR lpszSubItem, vector<CString> vecData)
    {
    USES_CONVERSION;

    CString strItem(lpszItem);
    //CString strAttributeName(lpszSubItem);

    BSTR bstrItem = ::_com_util::ConvertStringToBSTR(T2A(strItem.GetBuffer(0)));

    // read content and attribute
    MSXML2::IXMLDOMElementPtr spElem;
    MSXML2::IXMLDOMNodePtr spParentNode;
    MSXML2::IXMLDOMNodePtr spNode;
    if(m_spReadPrjDoc)
    {
    BSTR bstrContent;
    spNode = m_spReadPrjDoc->selectSingleNode(bstrItem);
    if(spNode)
    {
    MSXML2::IXMLDOMNodeListPtr spGroupsList;
    spGroupsList=spNode->childNodes;

    if(spGroupsList)
    {
    // clear node
    int lListLength=spGroupsList->Getlength();
    for (int i=lListLength-1;i>=0;i--)
    {
    MSXML2::IXMLDOMNodePtr subnode = NULL;
    spGroupsList->get_item(i, &subnode);

    spNode->removeChild(subnode);
    }

    // add item
    for (int i=0; i<vecData.size(); i++)
    {
    CString strNodeName;
    CString strNodeValue = vecData.at(i);
    strNodeName.Format( _T("%s%d"), lpszSubItem, i);

    spElem = m_spReadPrjDoc->createElement(strNodeName.AllocSysString());
    spElem->text = strNodeValue.AllocSysString();
    HRESULT hResult;
    hResult = spNode->appendChild(spElem);
    if FAILED(hResult)
    {
    return 5; //插入失败
    }
    }

    m_spReadPrjDoc->save((_variant_t)m_filepath);//节点处理函数

    return vecData.size();
    }
    }

    return 0;
    }
    else
    {
    return 0;
    }
    }

    int CConfigXmlFile02::RemoveChildNode(void)
    {
    return 0;
    }





  • 相关阅读:
    day12_字符连接单引号转意字符
    day12_存储过程说明
    day12_PLSQL编程--存储过程---统一发布动态属性管理
    linux关闭celinux服务
    day11__表管理
    day11_分区表------子分区的母模板(11g)
    day11_分区表------子分区的母模板(10g)
    day11_分区表——分区表常用维护
    smartforms 中的currquan单位处理
    当SVN服务器端IP地址发生变化时,客户端重新定位
  • 原文地址:https://www.cnblogs.com/carl2380/p/2317350.html
Copyright © 2011-2022 走看看