• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

MFC使用基于COM的MSXML2进行XML文件的写入和解析

开发技术 开发技术 8小时前 4次浏览

COM封装了一套XML文件操作库。

下面将演示该库的使用

首先加载该库

#import "msxml3.dll"

然后使用该库

 1     ::CoInitialize(0);
 2     MSXML2::IXMLDOMDocumentPtr doc;
 3     doc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
 4 
 5     //创建一个root根节点
 6     MSXML2::IXMLDOMElementPtr root;
 7     root = doc->createElement((_bstr_t)"root");
 8     root->setAttribute((_bstr_t)"id", (_variant_t)"1");
 9 
10     //创建一个子节点
11     MSXML2::IXMLDOMElementPtr node;
12     node = doc->createElement((_bstr_t)"node");
13     node->setAttribute((_bstr_t)"id", (_variant_t)"2");
14     node->put_text((_bstr_t)"value...");
15 
16     //逐级添加
17     root->appendChild(node);
18     doc->appendChild(root);
19 
20     //输出到文件
21     doc->save((_variant_t)"test.xml");
22 
23     // 清理文件
24     doc.Release();
25     root.Release();
26     node.Release();
27     ::CoUninitialize();

下面演示解析该xml

 1     ::CoInitialize(0);
 2     MSXML2::IXMLDOMDocumentPtr doc;
 3     doc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
 4 
 5     // 打开文件
 6     doc->load((_variant_t)"test.xml");
 7 
 8     //获取文档节点
 9     MSXML2::IXMLDOMElementPtr root;
10     root = doc->GetdocumentElement();
11 
12     MSXML2::IXMLDOMNodeListPtr nodelist;
13     root->get_childNodes(&nodelist);                //获取所有节点
14     long length = 0;
15     nodelist->get_length(&length);                    //所有节点的个数
16     for (int i = 0; i < length; ++i)
17     {
18         MSXML2::IXMLDOMNodePtr node;
19         nodelist->get_item(i, &node);    //顺序获取节点
20         BSTR str = (BSTR)alloca(64);
21         node->get_text(&str);                //获取节点下的值    
22         OutputDebugStringW(str);
23         MSXML2::IXMLDOMNamedNodeMapPtr nodemap;
24         node->get_attributes(&nodemap);                        //获取节点的属性
25         long length = 0;
26         nodemap->get_length(&length);
27         for (int n = 0; n < length; ++n)                    //循序输出属性
28         {
29             nodemap->get_item(n, &node);
30             CString t1 = (char*)(_bstr_t)node->nodeName;
31             CString t2 = (char*)(_bstr_t)node->text;
32             OutputDebugString(t1+t2);        
33         }
34         node.Release();
35         nodemap.Release();
36     }
37 
38     doc.Release();
39     root.Release();
40     nodelist.Release();
41     ::CoUninitialize();

 


程序员灯塔
转载请注明原文链接:MFC使用基于COM的MSXML2进行XML文件的写入和解析
喜欢 (0)