更新时间:2016-05-29 17:08:13浏览次数:1+次
#include <string>
#include <sstream>
using namespace std;
#import "msxml3.dll" // - 直接在文件中导入,不依赖IDE的导入,移植性好
class CXml
{
public:
CXml(){}
~CXml(){}
static bool SetValue(string strName,string strValue,string strPath="setting.xml")
{
::CoInitialize(NULL);
MSXML2::IXMLDOMDocumentPtr XMLDOC;// - XML文档对象
HRESULT HR = XMLDOC.CreateInstance(__uuidof(MSXML2::DOMDocument30));// - 创建XML文档实例
XMLDOC->load(strPath.c_str());// - 加载xml文件
strName = "//"+strName;
MSXML2::IXMLDOMNodePtr pNode = XMLDOC->selectSingleNode(strName.c_str());
_variant_t value;
HRESULT hr = pNode->put_text(_bstr_t(strValue.c_str()));
pNode.Release();
XMLDOC->save(strPath.c_str());
XMLDOC.Release(); // - 释放使用的文档对象
::CoUninitialize(); // - 释放COM组件使用环境
if(SUCCEEDED(hr))
return true;
else
return false;
}
static bool SetValue(string strName,int Value,string strPath="setting.xml")
{
ostringstream ostr;
ostr <<Value;
string str = ostr.str();
return SetValue(strName,str,strPath);
}
static string GetValueStr(string strName,string strPath="setting.xml")
{
::CoInitialize(NULL);
MSXML2::IXMLDOMDocumentPtr XMLDOC;// - XML文档对象
HRESULT HR = XMLDOC.CreateInstance(__uuidof(MSXML2::DOMDocument30));// - 创建XML文档实例
XMLDOC->load(strPath.c_str());// - 加载xml文件
strName = "//"+strName;
MSXML2::IXMLDOMNodePtr pNode = XMLDOC->selectSingleNode(strName.c_str());
_variant_t value;
pNode->get_nodeTypedValue(&value);
std::string strValue = _bstr_t(value);
pNode.Release();
XMLDOC.Release(); // - 释放使用的文档对象
::CoUninitialize(); // - 释放COM组件使用环境
return strValue;
}
static int GetValueInt(string strName,string strPath="setting.xml")
{
::CoInitialize(NULL);
MSXML2::IXMLDOMDocumentPtr XMLDOC;// - XML文档对象
HRESULT HR = XMLDOC.CreateInstance(__uuidof(MSXML2::DOMDocument30));// - 创建XML文档实例
XMLDOC->load(strPath.c_str());// - 加载xml文件
strName = "//"+strName;
MSXML2::IXMLDOMNodePtr pNode = XMLDOC->selectSingleNode(strName.c_str());
_variant_t value;
pNode->get_nodeTypedValue(&value);
int Value = (int)value;
pNode.Release();
XMLDOC.Release(); // - 释放使用的文档对象
::CoUninitialize(); // - 释放COM组件使用环境
return Value;
}
};
<txt>
<name>张三</name>
<age>12</age>
</txt>
下面是不适用的,因为节点名称name重复了,你要得到【李四】节点,就有问题了:<txt>
<name>张三</name>
<name>李四</name>
</txt>
至于重复名称的节点的获取,你可以熟悉之后,将重复名称节点处理一下,基本思路就是根据父节点或者节点属性来筛选。只要你保证节点名称不重复,就可以了。这个可以满足很多需求了。当然,如果需求不满足时,你就需要给这个类添加功能支持了。 相关资讯