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文件的写入和解析
原文:https://www.cnblogs.com/Super-biscuits/p/14869171.html