vc 读写xml文件二个实例
13
保护
c++代码为:
coinitialize(null);
msxml2::ixmldomdocumentptr pdoc;
msxml2::ixmldomelementptr xmlroot;hresult hr = pdoc.createinstance(__uuidof(msxml2::domdocument30));
if(!succeeded(hr))
{
messagebox("无法创建domdocument对象,请检查是否安装了ms xmlparser 运行库!");
}pdoc->load("f:test.xml");
//找到xml的跟节点
xmlroot=(msxml2::ixmldomelementptr)pdoc->selectsinglenode("//root");msxml2::ixmldomelementptr childnode,childnode1;
//添加一个新的“device”
childnode=pdoc->createelement((_bstr_t)"device");
childnode->setattribute("id",(const char*)"10042");
childnode->setattribute("name",(const char*)"设备2");
xmlroot->appendchild(childnode);//type节点
childnode1=pdoc->createelement((_bstr_t)"type");
childnode1->puttext((_bstr_t)"14");
childnode->appendchild(childnode1);childnode1=pdoc->createelement((_bstr_t)"typename");
childnode1->puttext((_bstr_t)"保护2");
childnode->appendchild(childnode1);pdoc->save("f:test.xml");
coinitialize(null);
下面看个简单实现
建立一个基于dialog的mfc工程,工程名为operatexml,然后在对话框上添加两个按钮("create"和"getdata"和一个listcontrol
控件(用来显示数据),首先要导入库文件
#import "msxml3.dll"
using namespace msxml2;
主要用来实现xml文件的相关操作,
双击"create"按钮进入代码编写,代码如下:
void coperatexml::onbtncreate()
{
// todo: add your control notification handler code here
::coinitialize(null); //初始化com
msxml2::ixmldomdocumentptr pdoc;
msxml2::ixmldomelementptr xmlroot;
hresult hr = pdoc.createinstance(__uuidof(msxml2::domdocument30));
if(!succeeded(hr))
{
messagebox("error");
return;
}
pdoc->raw_createelement((_bstr_t)(char*)"china", &xmlroot);
pdoc->raw_appendchild(xmlroot, null);msxml2::ixmldomelementptr childnode;
pdoc->raw_createelement((_bstr_t)(char*)"city", &childnode);
childnode->puttext("shanghai");
childnode->setattribute("population", "7000");
childnode->setattribute("area", "2000");
xmlroot->appendchild(childnode);pdoc->raw_createelement((_bstr_t)(char*)"city", &childnode);
childnode->puttext("beijing");
childnode->setattribute("population", "39999");
childnode->setattribute("area", "3322");
xmlroot->appendchild(childnode);pdoc->save("d:test.xml");
}双击"getdata"按钮进入代码编写,代码如下:
void coperatexml::onbtnget()
{
// todo: add your control notification handler code here
m_list.deleteallitems();
msxml2::ixmldomdocumentptr pdoc;
hresult hr = pdoc.createinstance(__uuidof(msxml2::domdocument30));
if(!succeeded(hr))
{
messagebox("error!");
return;
}
pdoc->load("d:test.xml");
msxml2::ixmldomelementptr childnode;
childnode = (msxml2::ixmldomelementptr)(pdoc->selectsinglenode("//city"));msxml2::domnodetype nodetype;
childnode->get_nodetype(&nodetype);msxml2::ixmldomnamednodemapptr pattrs = null;
msxml2::ixmldomnodelistptr nodelist;
msxml2::ixmldomnodeptr pattritem;
childnode->get_attributes(&pattrs);
childnode->get_childnodes(&nodelist);
long ncount, icount;
pattrs->get_length(&ncount); //获取节点属性个数
nodelist->get_length(&icount); //获取节点个数
for(int i = 0; i < icount; i++) //根据需要可以添加数据到listcontrol中
{
for(int j = 0; j < ncount; j++)
{
pattrs->get_item(j, &pattritem);
cstring strattrname = (char*)(_bstr_t)pattritem->nodename;
cstring strattrvalue = (char*)(_bstr_t)pattritem->nodetypedvalue;
m_list.insertitem(i, strattrname);
m_list.setitemtext(i, 1, strattrvalue);
}
}}
为listcontrol控件绑定一个操作变量
clistctrl m_list;
在oninitdialog中初始化,代码如下:
bool coperatexml::oninitdialog()
{
// todo: add extra initialization here
m_list.insertcolumn(0, "人口");
m_list.insertcolumn(1, "num");
m_list.insertcolumn(1, "面积");
m_list.insertcolumn(1, "num");
crect rect;
m_list.getclientrect(&rect);
int width = (rect.right - rect.left) / 4;
m_list.setcolumnwidth(0, width);
m_list.setcolumnwidth(1, width);
m_list.setcolumnwidth(2, width);
m_list.setcolumnwidth(3, width);
}
如果我不曾见过太阳高清无删减夸克在线看-如果我不曾见过太阳蓝光高清1080p无删减资源夸克免费转存
如果我不曾见过太阳阿里云盘全集高清1080P资源链接-如果我不曾见过太阳免费阿里云盘资源下载4K高清无删减版链接
罚罪1+2全80集阿里云盘全集资源链接-罚罪1+2全集高清1080P/4K阿里云盘资源下载无删减
邵氏精品禁品未删减资源在线看-必看的50部邵氏电影无删减观看入口
羞羞漫画高清最新资源-正规平台免费入口与无删减资源导航
日漫入口-官方认证安全入口与无删减日漫资源直达导航