惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
C
Check Point Blog
Vercel News
Vercel News
Y
Y Combinator Blog
G
Google Developers Blog
P
Proofpoint News Feed
WordPress大学
WordPress大学
MongoDB | Blog
MongoDB | Blog
博客园 - 司徒正美
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
L
LangChain Blog
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
博客园_首页
B
Blog RSS Feed
The Cloudflare Blog
MyScale Blog
MyScale Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Security Blog
Microsoft Security Blog

博客园 - 施昌权-博客

WebBrowser控件说明 实验1 Windows汇编语言开发环境 使用Visual C++调试器调试 在VC程序中使用调试语句 编写易于调试的vc代码 轻松实现一个操作ini文件的类 如何使用 MFC 嵌入并自动化 Microsoft Excel 工作表 开发可以自动运行程序的U盘 vc++操作word linux socket 编程 VC_XML 在vc中使用MSXML解析xml文件 利用MSXML解析XML文本(VC) VC中BSTR、Char和CString类型的转换 XML文档对象模型 利用VC++与MSXML解析XML文档 XML编程实例 简单的VC 操作XML 文件的的方法 VC读写XML文件
VC读写XML文件
施昌权-博客 · 2008-01-29 · via 博客园 - 施昌权-博客

今天对XML文件进行了一些简单的读写操作,下面来具体实现步骤:

首先:建立一个基于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);
}

F7编译程序,Ctrl+F5查看显示结果,至此一个简单的操作XML文件的实现已经成功的完成了。