使用MsXML存取XML
来源:互联网 发布:切片后上传淘宝有空隙 编辑:程序博客网 时间:2024/05/17 23:57
原文地址http://book.51cto.com/art/200908/145797.htm
6.4.3 使用MsXML存取XML(2)
现在动手
对应于如上的JavaScript代码,我们接下来实现存取persons.xml文件的Visual C++版本。
【程序 6-8】使用MsXML读写XML文件
- 01 #include "stdafx.h"
- 02 #include "comutil.h"
- 03 #include <clocale>
- 04
- 05 #import "msxml4.dll"
- 06
- 07 void WritePerson(MSXML2::IXMLDOMDocument2Ptr pDocument,
- MSXML2::IXMLDOMNodePtr pParentNode, CString name, long age)
- 08 {
- 09 //创建一个<person>节点
- 10 MSXML2::IXMLDOMElementPtr pPersonNode =
pDocument->createElement(_T("person"));- 11 pParentNode->appendChild(pPersonNode);
- 12
- 13 //写入name
- 14 MSXML2::IXMLDOMElementPtr pPersonNameNode =
pDocument->createElement(_T("name"));- 15 pPersonNameNode->text = _bstr_t(name);
- 16
- 17 //写入age
- 18 MSXML2::IXMLDOMElementPtr pPersonAgeNode =
pDocument->createElement(_T("age"));- 19 pPersonAgeNode->text = _bstr_t(age);
- 20
- 21 pPersonNode->appendChild(pPersonNameNode);
- 22 pPersonNode->appendChild(pPersonAgeNode);
- 23 }
- 24
- 25 void WritePersons()
- 26 {
- 27 MSXML2::IXMLDOMDocument2Ptr pXMLDocument;
- 28 pXMLDocument.CreateInstance(__uuidof(MSXML2::DOMDocument));
- 29 MSXML2::IXMLDOMElementPtr pPersonsNode =
- pXMLDocument->createElement(_T("persons"));
- 30 pXMLDocument->appendChild(pPersonsNode);
- 31
- 32 WritePerson(pXMLDocument, pPersonsNode, _T("佟湘玉"), 28);
- 33 WritePerson(pXMLDocument, pPersonsNode, _T("白展堂"), 27);
- 34
- 35 pXMLDocument->save(_T("persons.xml"));
- 36 }
- 37
- 38 void ReadPersons()
- 39 {
- 40 MSXML2::IXMLDOMDocument2Ptr pXMLDocument;
- 41 pXMLDocument.CreateInstance(__uuidof(MSXML2::DOMDocument));
- 42
- 43 pXMLDocument->load(_T("persons.xml"));
- 44
- 45 MSXML2::IXMLDOMElementPtr pRootNode =
pXMLDocument->documentElement;- 46 //查找<person>节点
- 47 MSXML2::IXMLDOMNodeListPtr pPersonNodes =
pRootNode->selectNodes(_T("person"));- 48
- 49 CString s;
- 50 long size = pPersonNodes->length;
- 51
- 52 for(int i = 0; i < size; i++)
- 53 {
- 54 MSXML2::IXMLDOMNodePtr pPersonNode =
pPersonNodes->item[i];- 55
- 56 MSXML2::IXMLDOMNodePtr pNameNode =
pPersonNode->selectSingleNode(_T("name"));- 57 MSXML2::IXMLDOMNodePtr pAgeNode =
pPersonNode->selectSingleNode(_T("age"));- 58
- 59 s.Format(_T("%sname: %s/tage: %s/r/n"),
s, (LPCTSTR)pNameNode->- text, (LPCTSTR)pAgeNode->text);
- 60 }
- 61
- 62 _tprintf(s);
- 63 }
- 64
- 65 int _tmain()
- 66 {
- 67 setlocale(LC_ALL, "chs");
- 68
- 69 HRESULT hr;
- 70 hr = ::CoInitialize(NULL);
- 71
- 72 WritePersons();
- 73 ReadPersons();
- 74
- 75 ::CoUninitialize();
- 76 return 0;77 }
运行结果如图6-27所示。
图6-27 运行结果在Visual C++中,调用COM组件比较省力、安全的办法是使用#import方式,关于此方式,读者朋友们可参见第14.3.7小节"使用#import方式调用COM组件"。另外,MsXML的版本不同,其提供的DLL文件名也不同,如MSXML 4.0对应的DLL为"msxml4.dll"。细心的读者可能会发现,一旦在程序中导入了msxml4.dll并build(生成)一次项目,在程序中就可以自动引入一些类,如:MSXML2::IXMLDOMDocument2Ptr,MSXML2是一个C++名字空间,IXMLDOMDocument2Ptr则是一个封装了IXMLDOMDocument对象操作的智能指针类。好奇的读者可以选择"IXMLDOMDocument2Ptr",并查看其定义,就可以跟踪到Debug目录下一个叫着msxml4.tlh的头文件,它是由Visual C++从msxml4.dll中自动提取并生成的C++头文件,与此一起生成的还有其他的文件,如msxml4.tli等。
光盘导读
该项目对应于光盘中的目录"/ch06/MsXmlTest"。
MSDN参考
欲在MSDN中查看相关信息,可使用关键字:"MSXML,API history"。
- 使用MsXML存取XML
- 使用MsXML存取XML(2)
- pb使用msxml进行网页存取
- 使用MSXML解析XML文件
- 使用MSXML解析XML文件
- 使用MsXML读写XML文件
- VC使用MSXML解析XML文档
- 使用 MSXML 分析器处理 XML 文档
- VC使用MSXML解析XML文档
- 简单使用MSXML生成xml文件
- VC使用MSXML解析XML文档
- vc使用msxml解析xml文档
- VC使用MSXML解析XML文档
- VC6 使用msxml 操作xml 文档
- VC使用MSXML解析XML文档
- VC使用MSXML解析XML文档
- mfc 使用MSXML.DLL读写XML
- 使用MSXML进行基本的XML操作
- VC菜单热键、应用程序热键和系统级热键。
- apache+python+mod_python+django 编译安装指南
- javascript动态向table添加tr
- 通过批处理文件实现网络文件复制
- MCISendString详细参数
- 使用MsXML存取XML
- 模板方法模式的例子
- 使用CascadingDropDown实现国家省市联动控件
- 各浏览器的默认CSS
- 细节成就卓越——浅析iPhone用户界面设计精粹
- js 实现 省市县三级级联
- This is true
- ext-gwt与gwt-ext的区别
- source insight扩展