MFC使用自带的MSXML6.dll解析xml(开发环境vc2010)
程序是win32控制台程序
// msxml.cpp : 定义控制台应用程序的入口点。 #include "stdafx.h"
#include <iostream>
#include <atlstr.h>
#import <MSXML6.dll>
using namespace MSXML2;
using namespace std; void msxml2_init()
{
::CoInitialize(NULL);
} void msxml2_del()
{
::CoUninitialize();
}
/* nodename: 要查找的节点的名字
* xmbuf: xml字符串
* 函数功能:查找目标节点的所有属性值
*/
void find_node_attr(char *nodename, char *xmlbuf)
{
MSXML2::IXMLDOMDocumentPtr pDoc;
HRESULT hr;
hr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument60));
if(FAILED(hr))
{
printf("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!\n");
return ;
}
/* 加载xml字符串 */
pDoc->loadXML(xmlbuf); MSXML2::IXMLDOMNodePtr pRoot_node, pNode;
MSXML2::IXMLDOMNamedNodeMapPtr pAttrs;
MSXML2::IXMLDOMNodePtr pAttrItem;
long nCount; /* 在树中查找名为Book的节点,"//"表示在任意一层查找 */
char tmpnodename[] = "//";
strncat(tmpnodename, nodename, );
pNode = pDoc->selectSingleNode(tmpnodename);
/* get_attributes()来获取该节点的所有属性列表 */
pNode->get_attributes(&pAttrs); pAttrs->get_length(&nCount);
cout << "共有" << nCount << "个属性值" << nCount << endl;
for(int i = ; i < nCount ; i++)
{
pAttrs->get_item(i, &pAttrItem);
/* nodeName, nodeTypedValue得到属性名和属性值 */
cout << (_bstr_t)pAttrItem->nodeName << ":" ;
cout << (_bstr_t)pAttrItem->nodeTypedValue << endl;
} //使用过了的指针要释放。未使用的指针不要释放,否则会触发中断错误。
pDoc.Release();
pNode.Release();
pAttrs.Release();
pAttrItem.Release();
} /*
* 函数功能:遍历整个xml_buf的内容并打印节点名字和节点的属性值
*/
void print_xmlnode(char *xmlbuf)
{ MSXML2::IXMLDOMDocumentPtr pDoc;
HRESULT hr;
hr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument60));
if(FAILED(hr))
{
printf("无法创建DOMDocument对象,请检查是否安装了MS XML Parser 运行库!\n");
return ;
}
/* 加载xml字符串 */
pDoc->loadXML(xmlbuf); MSXML2::IXMLDOMNodePtr pGwsIp_node, pRoot_node, pNode;
MSXML2::IXMLDOMNamedNodeMapPtr pAttrs = NULL;
MSXML2::IXMLDOMNodePtr pAttrItem; /* 遍历整个xml_buf的内容并打印节点名字和节点的属性值 */
pRoot_node = pDoc->firstChild;
pGwsIp_node = pRoot_node->firstChild;//pDoc->firstChild->firstChild;
MSXML2::DOMNodeType nodeType;
long nCount ; //节点名称 root下子节点的个数
unsigned int num = pRoot_node->childNodes->length;
cout << "num = " << num << endl;
char node_name[] = {};
//Gettext()获取节点值
for(int i = ; i < num; i++) {
strcpy(node_name, pRoot_node->childNodes->item[i]->Gettext());
cout << "node_name = " << node_name << endl;
} /*IXMLDOMNamedNodeMap是xml中描述一个结点属性的接口,
通过它用户可以对某个节点的属性进行操作*/
pGwsIp_node->get_attributes(&pAttrs);
pAttrs->get_length(&nCount); for(int i = ; i < nCount ; i++)
{
pAttrs->get_item(i,&pAttrItem);
/*get_nodeName,get_nodeTypedValue得到属性名和属性值*/
cout << (_bstr_t)pAttrItem->nodeName << ":" ;
cout << (_bstr_t)pAttrItem->nodeTypedValue << endl;
}
//使用过了的指针要释放。未使用的指针不要释放,否则会触发中断错误。
pDoc.Release();
pRoot_node.Release();
pGwsIp_node.Release();
pAttrs.Release();
pAttrItem.Release();
} int _tmain(int argc, _TCHAR* argv[])
{
msxml2_init(); char buf[] = "<gwsctrl><gws ip=\"192.168.1.24\" emac=\"D4:CA:6D:35:0D:95\" wmac=\"D4:CA:6D:11:59:9F\"/><A>一个节点</A><B>二个节点</B></gwsctrl>"; find_node_attr("gws", buf);
print_xmlnode(buf); getchar();
msxml2_del();
return ;
}
运行后的效果
MFC使用自带的MSXML6.dll解析xml(开发环境vc2010)的更多相关文章
- Android零基础入门第3节:带你一起来聊一聊Android开发环境
原文:Android零基础入门第3节:带你一起来聊一聊Android开发环境 工欲善其事,必先利其器.Android开发人员在自己的计算机上编写和测试应用程序,然后将其部署到实际的设备上,那首先必不可 ...
- 用JDK自带的包来解析XML文件(DOM+xpath)
DOM编程不要其它的依赖包,因为JDK里自带的JDK里含有的上面提到的org.w3c.dom.org.xml.sax 和javax.xml.parsers包就可以满意条件了.(1)org.w3c.do ...
- Android开发学习---使用XmlPullParser解析xml文件
Android中解析XML的方式主要有三种:sax,dom和pull关于其内容可参考:http://blog.csdn.net/liuhe688/article/details/6415593 本文将 ...
- [置顶] Android学习系列-Android中解析xml(7)
Android学习系列-Android中解析xml(7) 一,概述 1,一个是DOM,它是生成一个树,有了树以后你搜索.查找都可以做. 2,另一种是基于流的,就是解析器从头到尾解析一遍xml文件. ...
- fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC sha
调试程序时出现以下问题:d:\program files (x86)\microsoft visual studio 10.0\vc\atlmfc\include\afx.h(24): fatal e ...
- 在XP系统中自带的 msvcrt.dll 和 Vista 中的 msvcrt.dll 版本不同,导致抛出的异常不同
然而,在XP系统中,系统自带的 msvcrt.dll 和 Vista 中的 msvcrt.dll 版本不同, 并没有这个 _except_handler4_common ,结果就出现了启动程序时,遇到 ...
- 使用java自带的xml解析器解析xml
使用java自带的xml解析器解析xml,其实我不推荐,可以用Dom解析,或其他的方式,因为Java自带的解析器使用不但麻烦,且还有bug出现. 它要求,针对不同的xml(结构不同),必须写对应的ha ...
- VC 使用msxml6.dll动态链接库中的函数读写XML文件
VC 使用msxml6.dll动态链接库中的函数读写XML文件 目录 1 引言 2 .dll使用方法 3 常用函数总结 4 实例应用 5 运行效果预览 6 补充说明 7 不足之处 8 更新 引言: ...
- Java jdom解析xml文件带冒号的属性
Java jdom解析xml文件带冒号的属性 转载请标明出处: https://dujinyang.blog.csdn.net/article/details/99644824 本文出自:[奥特曼超人 ...
随机推荐
- STL之全排列
描述 使用STL中的next_permutation函数输出一个序列的全排列. 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码. int main() { vector<int> ...
- lync项目总结
概述 9月份,由于公司人事变动,摆在自己面前也有两条路可选择,一是选择lync,二是选择sharepoint,由于之前,部门老大已经让我看了大概一个月的有关lync方面的资料(文档,代码,项目实施等) ...
- SpringMVC——redirect重定向跳转传值
原文:https://my.oschina.net/u/2273085/blog/398374 spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url ...
- 【FTP】org.apache.commons.net.ftp.FTPClient实现复杂的上传下载,操作目录,处理编码
和上一份简单 上传下载一样 来,任何的方法不懂的,http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net ...
- 深入理解AMD和RequireJS!
AMD 基于commonJS规范的nodeJS出来以后,服务端的模块概念已经形成,很自然地,大家就想要客户端模块.而且最好两者能够兼容,一个模块不用修改,在服务器和浏览器都可以运行.但是,由于一个重大 ...
- webpacke install vue application 报错 Failed at the phantomjs-prebuilt@2.1.14 install script
刚刚在网上下了个开源的项目: https://github.com/ing670/webappkiller 执行npm install 报错:npm ERR! Failed at the phanto ...
- Required MultipartFile parameter 'file' is not present error
<input type=“file”> 中的name 与id 属性 与 addbanner(@RequestParam("file") MultipartFile ...
- Jquery获取当前行的数据
取表格当前行数据js代码: Java代码 $(function() { $(".myclass").each(function(){ var tmp=$(this).chi ...
- 【CI】系列一:总体环境规划
上周花了点时间把CI环境再次给搞起来了,但是觉得在实体机中总觉得不是很安心,安全性不足,另外没有做备份,安全性.扩展性等都不足,且不好迁移. 因为目前只给了我一台PC及,配置其实也不怎么样.但是却需要 ...
- 香蕉派 Banana pi BPI-M1+ 双核开源单板计算机. 板载WIFI
Banana PI BPI-M1+是一款高性能双核开源硬件单板计算机,Banana PI BPI-M1+是一款比树莓派更强悍的双核Android4.4与Linux产品. Banana PI BP ...