XMLObject.h
#pragma once
class CXMLObject
{
public:
CXMLObject(void);
~CXMLObject(void);
public:
{
public:
CXMLObject(void);
~CXMLObject(void);
public:
static MSXML::IXMLDOMDocumentPtr CLoadXML(CString strXML); //建立一个XML对象
static MSXML::IXMLDOMDocumentPtr CLoad(CString strPath); //根据XML路径加载XML
static bool CSave(MSXML::IXMLDOMDocumentPtr xmlDoc,CString strPath); //将XML存到指定路径
static bool CSave(MSXML::IXMLDOMDocumentPtr xmlDoc,CString strPath); //将XML存到指定路径
static MSXML::IXMLDOMElementPtr AppendNode(MSXML::IXMLDOMDocumentPtr xmlDoc, //在指定节点上添加节点
MSXML::IXMLDOMElementPtr xmlNode,
CString nodeName);
static MSXML::IXMLDOMElementPtr AppendNode(MSXML::IXMLDOMDocumentPtr xmlDoc, //在指定节点上添加节点
MSXML::IXMLDOMElementPtr xmlNode,
CString nodeName, CString nodeValue);
static MSXML::IXMLDOMElementPtr AppendAttr(MSXML::IXMLDOMDocumentPtr xmlDoc, //在指定节点上添加属性和属性值
MSXML::IXMLDOMElementPtr xmlNode,
CString attrName, CString attrValue);
MSXML::IXMLDOMElementPtr xmlNode,
CString nodeName);
static MSXML::IXMLDOMElementPtr AppendNode(MSXML::IXMLDOMDocumentPtr xmlDoc, //在指定节点上添加节点
MSXML::IXMLDOMElementPtr xmlNode,
CString nodeName, CString nodeValue);
static MSXML::IXMLDOMElementPtr AppendAttr(MSXML::IXMLDOMDocumentPtr xmlDoc, //在指定节点上添加属性和属性值
MSXML::IXMLDOMElementPtr xmlNode,
CString attrName, CString attrValue);
static MSXML::IXMLDOMElementPtr GetDocElement(MSXML::IXMLDOMDocumentPtr xmlDoc); //获得XML的根节点
static CString GetAttrValue(MSXML::IXMLDOMElementPtr xmlNode,CString attrName);//根据属性名获得属性值
};
XMLObject.cpp
#include "StdAfx.h"
#include "./xmlobject.h"
CXMLObject::CXMLObject(void)
{}
{}
CXMLObject::~CXMLObject(void)
{}
{}
MSXML::IXMLDOMDocumentPtr CXMLObject::CLoadXML(CString strXML)
{
MSXML::IXMLDOMDocumentPtr xmlDoc;
HRESULT hr = xmlDoc.CreateInstance(MSXML::CLSID_DOMDocument);
if(FAILED(hr))
throw("无法创建DOMDocument对象,请检查是否安装了 MS XML Parser 运行库");
xmlDoc->loadXML((_bstr_t)strXML);
return xmlDoc;
}
{
MSXML::IXMLDOMDocumentPtr xmlDoc;
HRESULT hr = xmlDoc.CreateInstance(MSXML::CLSID_DOMDocument);
if(FAILED(hr))
throw("无法创建DOMDocument对象,请检查是否安装了 MS XML Parser 运行库");
xmlDoc->loadXML((_bstr_t)strXML);
return xmlDoc;
}
MSXML::IXMLDOMDocumentPtr CXMLObject::CLoad(CString strPath)
{
MSXML::IXMLDOMDocumentPtr xmlDoc;
HRESULT hr = xmlDoc.CreateInstance(MSXML::CLSID_DOMDocument);
if(FAILED(hr))
throw("无法创建DOMDocument对象,请检查是否安装了 MS XML Parser 运行库");
_bstr_t bstrFileName;
bstrFileName = strPath.AllocSysString();
variant_t vResult;
vResult = xmlDoc->load(bstrFileName);
{
MSXML::IXMLDOMDocumentPtr xmlDoc;
HRESULT hr = xmlDoc.CreateInstance(MSXML::CLSID_DOMDocument);
if(FAILED(hr))
throw("无法创建DOMDocument对象,请检查是否安装了 MS XML Parser 运行库");
_bstr_t bstrFileName;
bstrFileName = strPath.AllocSysString();
variant_t vResult;
vResult = xmlDoc->load(bstrFileName);
return xmlDoc;
}
}
bool CXMLObject::CSave(MSXML::IXMLDOMDocumentPtr xmlDoc,CString strPath)
{
HRESULT hr = xmlDoc->save((_bstr_t)strPath);
if(FAILED(hr))
return false;
else
return true;
}
{
HRESULT hr = xmlDoc->save((_bstr_t)strPath);
if(FAILED(hr))
return false;
else
return true;
}
MSXML::IXMLDOMElementPtr CXMLObject::AppendNode(MSXML::IXMLDOMDocumentPtr xmlDoc,
MSXML::IXMLDOMElementPtr xmlNode,
CString nodeName)
{
return AppendNode(xmlDoc,xmlNode,nodeName,"");
}
MSXML::IXMLDOMElementPtr CXMLObject::AppendNode(MSXML::IXMLDOMDocumentPtr xmlDoc,
MSXML::IXMLDOMElementPtr xmlNode,
CString nodeName, CString nodeValue)
{
MSXML::IXMLDOMElementPtr childNode;
xmlDoc->raw_createElement((_bstr_t)(char*)(_bstr_t)nodeName,&childNode);
childNode->Puttext((_bstr_t)nodeValue);
xmlNode->appendChild(childNode);
return childNode;
}
MSXML::IXMLDOMElementPtr xmlNode,
CString nodeName, CString nodeValue)
{
MSXML::IXMLDOMElementPtr childNode;
xmlDoc->raw_createElement((_bstr_t)(char*)(_bstr_t)nodeName,&childNode);
childNode->Puttext((_bstr_t)nodeValue);
xmlNode->appendChild(childNode);
return childNode;
}
MSXML::IXMLDOMElementPtr CXMLObject::AppendAttr(MSXML::IXMLDOMDocumentPtr xmlDoc,
MSXML::IXMLDOMElementPtr xmlNode,
CString attrName, CString attrValue)
{
xmlNode->setAttribute((_bstr_t)attrName,(_bstr_t)attrValue);
xmlDoc->raw_appendChild(xmlNode,NULL);
return xmlNode;
}
MSXML::IXMLDOMElementPtr xmlNode,
CString attrName, CString attrValue)
{
xmlNode->setAttribute((_bstr_t)attrName,(_bstr_t)attrValue);
xmlDoc->raw_appendChild(xmlNode,NULL);
return xmlNode;
}
MSXML::IXMLDOMElementPtr CXMLObject::GetDocElement(MSXML::IXMLDOMDocumentPtr xmlDoc)
{
MSXML::IXMLDOMElementPtr xmlRoot =NULL;
xmlDoc->get_documentElement(&xmlRoot);
return xmlRoot;
}
{
MSXML::IXMLDOMElementPtr xmlRoot =NULL;
xmlDoc->get_documentElement(&xmlRoot);
return xmlRoot;
}
CString CXMLObject::GetAttrValue(MSXML::IXMLDOMElementPtr xmlNode,CString attrName)
{
CString strTemp;
MSXML::IXMLDOMNamedNodeMapPtr pAttrs = NULL;
xmlNode->get_attributes(&pAttrs);
if (pAttrs==NULL) //此处没有属性值会报错
return "";
MSXML::IXMLDOMNodePtr pRequestTypeAttr=pAttrs->getQualifiedItem((_bstr_t)attrName,"");
_bstr_t strRequestType=pRequestTypeAttr->Gettext();
strTemp = strRequestType.operator char *();
return strTemp;
}
{
CString strTemp;
MSXML::IXMLDOMNamedNodeMapPtr pAttrs = NULL;
xmlNode->get_attributes(&pAttrs);
if (pAttrs==NULL) //此处没有属性值会报错
return "";
MSXML::IXMLDOMNodePtr pRequestTypeAttr=pAttrs->getQualifiedItem((_bstr_t)attrName,"");
_bstr_t strRequestType=pRequestTypeAttr->Gettext();
strTemp = strRequestType.operator char *();
return strTemp;
}