VC处理XML文档类的开发

来源:互联网 发布:java开发微信公众号 编辑:程序博客网 时间:2024/06/06 10:06

#pragma once

//--------------------------------------------------------//
#import <msxml6.dll>
#import "msxml.dll"
using namespace MSXML;
//--------------------------------------------------------//


class CMyXML
{
public:
 CMyXML(void);
public:
 ~CMyXML(void);
public:

 MSXML::IXMLDOMDocumentPtr XMLDoc;


 int LoadXMLStr(CString Str);
 int LoadXMLFile(CString FileName);

protected:
    int Init(void); 

public:
 int CreateNode(CString NodePath, CString NodeName);
 int CreateNode(CString NodePath, CString NodeName, CString Value);
 int ResetNodeValue(CString NodePath, CString Value);

 int DelteNode(CString ParentNodePath, CString NodePath);

 CString GetXml(void);
 CString GetNodeValue(CString NodePath);

 CString GetAttribute(CString NodeListName, CString AttributeName);
    //CString GetAttribute(CString NodeListName, CString AttributeName1, CString AttributeName2);

 //IXMLDOMNodeList GetNodeList(char* ElementsByTagName);
};

 

------------------------------------------------------------

#include "stdafx.h"
#include "MyXML.h"


CMyXML::CMyXML(void)
{
 
}

CMyXML::~CMyXML(void)
{
 XMLDoc=NULL;
}


int CMyXML::Init(void)
{
 HRESULT hr = ::CoInitialize(NULL);  //COM的初始化
 if (!SUCCEEDED(hr))
  return -1;
 
 XMLDoc.CreateInstance(__uuidof(MSXML::DOMDocument));

 return 0;
}


int CMyXML::LoadXMLStr(CString Str)
{
 if (Init())
 {
        return -1;
 }

 if(!XMLDoc->loadXML(_bstr_t(Str)))
 {
  return -1;
 }
  
 return 0;
}

int CMyXML::LoadXMLFile(CString FileName)
{
 if (Init())
 {
        return -1;
 }

 if(!XMLDoc->load((_bstr_t)FileName))
 {
  return -1;
 }

 return 0;
}

CString CMyXML::GetXml(void)
{
 //return XMLDoc->Gettext();
 CString str=XMLDoc->Gettext();
 return str;

}


int CMyXML::CreateNode(CString NodePath, CString NodeName)
{
 try
 {
  MSXML::IXMLDOMNodePtr RootNode = NULL;
  MSXML::IXMLDOMNodePtr NewNode = NULL;
  RootNode = XMLDoc->selectSingleNode((_bstr_t)NodePath);
  NewNode  = XMLDoc->createNode(MSXML::NODE_DOCUMENT_TYPE, (_bstr_t)NodeName, "");  
  RootNode->appendChild(NewNode);


 }catch(...)
 {

 }

 return 0;
}


int CMyXML::CreateNode(CString NodePath, CString NodeName, CString Value)
{

 try
 {
  MSXML::IXMLDOMNodePtr RootNode = NULL;
  MSXML::IXMLDOMNodePtr NewNode = NULL;
  RootNode = XMLDoc->selectSingleNode((_bstr_t)NodePath);
  NewNode  = XMLDoc->createNode(MSXML::NODE_DOCUMENT_TYPE, (_bstr_t)NodeName, "");  
  NewNode->nodeValue=(_bstr_t)Value;    //
  RootNode->appendChild(NewNode);


 }catch(...)
 {

 }
 return 0;
}


int CMyXML::ResetNodeValue(CString NodePath, CString Value)
{

 try
 {
  MSXML::IXMLDOMNodePtr RootNode = NULL;  
  RootNode = XMLDoc->selectSingleNode((_bstr_t)NodePath);  
  RootNode->nodeValue=(_bstr_t)Value;    //  

 }catch(...)
 {

 }
 return 0;
}

 


int CMyXML::DelteNode(CString ParentNodePath, CString NodePath)
{

 try
 {
  MSXML::IXMLDOMNodePtr RootNode = NULL; 
  MSXML::IXMLDOMNodePtr DeleteNode = NULL; 

  RootNode = XMLDoc->selectSingleNode((_bstr_t)ParentNodePath); 
  DeleteNode = XMLDoc->selectSingleNode((_bstr_t)NodePath); 
  RootNode->removeChild(DeleteNode);


 }catch(...)
 {
 }
 return 0;
}

 

CString CMyXML::GetNodeValue(CString NodePath)
{
 try
 {  
  CString str= XMLDoc->selectSingleNode((_bstr_t)NodePath)->Gettext();  //return XMLDoc->selectSingleNode((_bstr_t)NodePath)->Gettext();
  return str;

 }catch(...)  //catch(CException* ex)
 {
 } 
 return 0;
}


CString CMyXML::GetAttribute(CString NodeListName, CString AttributeName)
{
 MSXML::IXMLDOMNode *DOMNode  =   NULL;   
 try
 {       
  MSXML::IXMLDOMNodeListPtr NodeList=XMLDoc->getElementsByTagName((_bstr_t)NodeListName);   
  CString   sAttributeName;  
  for(int   i=0;   i<NodeList->length;   i++)  
  { 
   NodeList->get_item(i,&DOMNode); 
   BSTR   bAttributeName    = DOMNode->Getattributes()->getNamedItem((_bstr_t)AttributeName)->Gettext();  //strContest   =   (LPCSTR)DOMNode->text;
   sAttributeName=bAttributeName;  
   return sAttributeName;
  }
 }
 catch (...)
 {  
 }

 delete DOMNode;
 return 0;
}


//CString CMyXML::GetAttribute(CString NodeListName, CString AttributeName1, CString AttributeName2)
//{
// try
// {       
//  MSXML::IXMLDOMNodeListPtr NodeList=XMLDoc->getElementsByTagName((_bstr_t)NodeListName); 
//  MSXML::IXMLDOMNode *DOMNode  =   NULL;   
//  CString   strContest;  
//  for(int   i=0;   i<NodeList->length;   i++)  
//  { 
//   NodeList->get_item(i,&DOMNode); 
//   BSTR   m_type    = DOMNode->Getattributes()->getNamedItem((_bstr_t)AttributeName1)->Gettext();
//   strContest=m_type;
//   strContest   =   (LPCSTR)DOMNode->text;  
//   AfxMessageBox(strContest);  
//  }
// }
// catch (_com_error   &err)
// {  
//  CString     strErr   =   (LPCTSTR)err.Description();  
//  AfxMessageBox(strErr);  
// }
// return 0;
//}

 


//  TCHAR   szError[1024];  
//  e->GetErrorMessage(szError,1024);   //  e.GetErrorMessage(szError,1024);
//  ::AfxMessageBox(szError);
//  删除异常
//  e->Delete();


  //for(int   i=0;   i<NodeList->length;   i++)  
  //      { 
  // NodeList->get_item(i,&DOMNode); 

  //  BSTR   m_type    = DOMNode->Getattributes()->getNamedItem((_bstr_t)NodeName)->Gettext();

  //          strContest   =   (LPCSTR)DOMNode->text;  
  //          AfxMessageBox(strContest);  
  //}

 

原创粉丝点击