vc实现xml的操作
来源:互联网 发布:在线手机淘宝 编辑:程序博客网 时间:2024/06/11 06:00
<![endif]--> <!-- /* Font Definitions */ @font-face {font-family:宋体; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-alt:SimSun; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:PMingLiU; panose-1:2 2 3 0 0 0 0 0 0 0; mso-font-alt:新細明體; mso-font-charset:136; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 137232384 22 0 1048577 0;} @font-face {font-family:"/@宋体"; panose-1:2 1 6 0 3 1 1 1 1 1; mso-font-charset:134; mso-generic-font-family:auto; mso-font-pitch:variable; mso-font-signature:3 135135232 16 0 262145 0;} @font-face {font-family:"/@PMingLiU"; panose-1:2 2 3 0 0 0 0 0 0 0; mso-font-charset:136; mso-generic-font-family:roman; mso-font-pitch:variable; mso-font-signature:3 137232384 22 0 1048577 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; text-align:justify; text-justify:inter-ideograph; mso-pagination:none; font-size:10.5pt; mso-bidi-font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:宋体; mso-font-kerning:1.0pt;} /* Page Definitions */ @page {mso-page-border-surround-header:no; mso-page-border-surround-footer:no;} @page Section1 {size:612.0pt 792.0pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:36.0pt; mso-footer-margin:36.0pt; mso-paper-source:0;} div.Section1 {page:Section1;} /* List Definitions */ @list l0 {mso-list-id:1153717841; mso-list-template-ids:842289830;} @list l0:level1 {mso-level-tab-stop:36.0pt; mso-level-number-position:left; text-indent:-18.0pt;} @list l1 {mso-list-id:1918009290; mso-list-template-ids:1961924960;} @list l1:level1 {mso-level-tab-stop:36.0pt; mso-level-number-position:left; text-indent:-18.0pt;} ol {margin-bottom:0cm;} ul {margin-bottom:0cm;} --> <![endif]-->
最近,由于工作需要程序生成 XML 的索引记录文件,特将 VC++ 读写 XML 文件的方法总结如下(参考自: http://blog.csdn.net/firebird321/archive/2008/03/17/2190847.aspx) :
首先:建立一个基于 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 strAttr = (char*)(_bstr_t)pAttrItem->nodeType;
m_list.InsertItem(i, strAttrName);
m_list.SetItemText(i, 1, strAttr);
}
}
}
为 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 文件的实现已经成功的完成了。
程序代码
- #import "msxml6.dll" named_guids raw_interfaces_only
- #include <msxml.h>
- using namespace MSXML2;
- using namespace std;
- int testXml(wstring strfilname)
- {
- cout << "BEGIN" << endl;
- HRESULT hr;
- long cnt;
- try
- {
- MSXML2::IXMLDOMDocumentPtr pDoc;
- MSXML2::IXMLDOMNodeListPtr pNodeList;
- MSXML2::IXMLDOMNodePtr pNode, pRoot;
- MSXML2::IXMLDOMNamedNodeMapPtr pAttr;
- hr = ::CoInitialize(NULL);
- if (FAILED(hr))
- {
- throw L"failed to com init";
- }
- hr = CoCreateInstance(CLSID_DOMDocument60, NULL, CLSCTX_INPROC_SERVER,
- MSXML2::IID_IXMLDOMDocument, (void**)&pDoc);
- if(FAILED(hr))
- throw "failed to create DOM DOC";
- VARIANT_BOOL bIsSuccessful;
- BSTR bstr1 = SysAllocString(L"d://b.xml");
- VARIANT v1;
- v1.vt = VT_BSTR;
- v1.bstrVal = bstr1;
- ///// 载入 xml 文件
- pDoc->load(v1, &bIsSuccessful);
- SysFreeString(bstr1);
- ///// 获取根节点 ROOT_BASENAME
- //pRoot = pDoc->firstChild;
- pDoc->get_firstChild(&pRoot);
- ///// 输出跟节点名字
- BSTR bstr;
- pRoot->get_nodeName(&bstr);
- cout << (char*)((_bstr_t)bstr) <<endl;
- ///// 获取根节点属性 Attr_baseName_1 = "Attr_text_1" Attr_baseName_2 = "Attr_text_2"
- pRoot->get_attributes(&pAttr);
- ///// 取得属性个数
- long length;
- pAttr->get_length(&length);
- cout << length << endl;
- ///// 输出根节点属性
- for(cnt = 0 ; pAttr->nextNode(&pNode), pNode ; ++cnt)
- {
- BSTR baseName;
- pNode->get_baseName(&baseName);
- BSTR text;
- pNode->get_text(&text);
- cout << (char*)((_bstr_t)baseName) << " " << (char*)((_bstr_t)text) << endl;
- }
- cout << "Attr count " << cnt <<endl;
- ///// 输出根节点所有儿子
- pRoot->get_childNodes(&pNodeList);
- pNodeList->get_length(&cnt);
- cout << "LENGTH " << cnt << endl;
- for(cnt = 0; pNodeList->nextNode(&pNode), pNode; ++cnt)
- {
- BSTR text;
- pNode->get_text(&text);
- cout << (char*)((_bstr_t)text) << endl;
- }
- cout << "Node count " << cnt <<endl;
- }
- catch (string str)
- {
- cout << "Exception : " << str << endl;
- }
- catch (...)
- {
- cout << "Exception Unkonwn/n";
- }
- ::CoUninitialize();
- cout << "END" <<endl;
- return 0;
- }
xml 文件:
- <ROOT_BASENAME Attr_baseName_1 = "Attr_text_1" Attr_baseName_2 = "Attr_text_2">
- <FIRST_CHILD>
- text_1
- </FIRST_CHILD>
- <CHILD>
- text_2
- </CHILD>
- <LAST_CHILD>
- text_3
- vc实现xml的操作
- VC对于XML的解析以及操作
- VC操作XML的基本流程
- VC对于XML的解析以及操作
- VC操作XML的基本流程
- [转]VC操作XML
- VC 操作 XML 类
- XML操作VC
- vc中操作Xml
- VS2008 VC++ XML操作
- VC操作XML文件
- VC操作XML
- 简单的VC 操作XML 文件的的方法
- 简单的VC 操作XML 文件的的方法
- 简单的VC 操作XML 文件的的方法
- 简单的VC 操作XML 文件的的方法
- 简单的VC 操作XML 文件的的方法
- 简单的VC 操作XML 文件的的方法
- 关于不带www的域名
- C# 操作Clipboard
- 鼠标滑过图片出现大图片提示层效果js代码
- 邮箱验证
- 多文件上传的一个局部小程序代码
- vc实现xml的操作
- 记事备忘录^-^
- grivdview 模板之dropdownlist完美结合 -终结版
- 堆与栈
- (转)SQL Server多条件查询经典例子
- js之点击 超连接,提示一个层.点击空白.层消失
- xml简介
- asp.net图片验证码
- 2010年4月19日(新公司入职,第三周星期一)