程序是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)的更多相关文章

  1. Android零基础入门第3节:带你一起来聊一聊Android开发环境

    原文:Android零基础入门第3节:带你一起来聊一聊Android开发环境 工欲善其事,必先利其器.Android开发人员在自己的计算机上编写和测试应用程序,然后将其部署到实际的设备上,那首先必不可 ...

  2. 用JDK自带的包来解析XML文件(DOM+xpath)

    DOM编程不要其它的依赖包,因为JDK里自带的JDK里含有的上面提到的org.w3c.dom.org.xml.sax 和javax.xml.parsers包就可以满意条件了.(1)org.w3c.do ...

  3. Android开发学习---使用XmlPullParser解析xml文件

    Android中解析XML的方式主要有三种:sax,dom和pull关于其内容可参考:http://blog.csdn.net/liuhe688/article/details/6415593 本文将 ...

  4. [置顶] Android学习系列-Android中解析xml(7)

    Android学习系列-Android中解析xml(7) 一,概述 1,一个是DOM,它是生成一个树,有了树以后你搜索.查找都可以做. 2,另一种是基于流的,就是解析器从头到尾解析一遍xml文件.   ...

  5. 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 ...

  6. 在XP系统中自带的 msvcrt.dll 和 Vista 中的 msvcrt.dll 版本不同,导致抛出的异常不同

    然而,在XP系统中,系统自带的 msvcrt.dll 和 Vista 中的 msvcrt.dll 版本不同, 并没有这个 _except_handler4_common ,结果就出现了启动程序时,遇到 ...

  7. 使用java自带的xml解析器解析xml

    使用java自带的xml解析器解析xml,其实我不推荐,可以用Dom解析,或其他的方式,因为Java自带的解析器使用不但麻烦,且还有bug出现. 它要求,针对不同的xml(结构不同),必须写对应的ha ...

  8. VC 使用msxml6.dll动态链接库中的函数读写XML文件

    VC 使用msxml6.dll动态链接库中的函数读写XML文件 目录 1 引言 2 .dll使用方法 3 常用函数总结 4 实例应用 5 运行效果预览 6 补充说明 7 不足之处 8 更新   引言: ...

  9. Java jdom解析xml文件带冒号的属性

    Java jdom解析xml文件带冒号的属性 转载请标明出处: https://dujinyang.blog.csdn.net/article/details/99644824 本文出自:[奥特曼超人 ...

随机推荐

  1. 【OpenJudge8464】【序列DP】股票买卖

    股票买卖 总时间限制: 1000ms 内存限制: 65536kB [描述] 最近越来越多的人都投身股市,阿福也有点心动了.谨记着“股市有风险,入市需谨慎”,阿福决定先来研究一下简化版的股票买卖问题. ...

  2. codevs 4163 求逆序对的数目 -树状数组法

    4163 hzwer与逆序对  时间限制: 10 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题目描述 Description hzwer在研究逆序对. 对于数列{a},如果 ...

  3. React Native使用Navigator组件进行页面导航报this.props....is not a function错误

    在push的时候定义回调函数: this.props.navigator.push({ component: nextVC, title: titleName, passProps: { //回调 g ...

  4. 解密所有APP运行过程中的内部逻辑(转)

    转贴地址:http://www.freebuf.com/tools/54562.html 0×01前言 这年头,apk 全都是加密啊,加壳啊,反调试啊,小伙伴们表示已经不能愉快的玩耍了.静态分析越来越 ...

  5. 推荐一些不错的开源免费易上手的web前端框架

    1. bui 2.Semantic UI 3.oniui

  6. php实现简单视图模板(视图引擎)

    视图 视图,你所看见的部分. <?php echo 'hello, world'; 从简单开始理解 这就是个视图文件中的代码,没错就这么简单.视图,实际上是在 MVC 这种架构上提出的.MVC ...

  7. pgmagick,pil不保存图片并且获取图片二进制数据记录

    PIL和pgmagick都是python中图像处理的库,只不过PIL功能更强大 pgmagick和PIL中对数据进行调整后经常需要调用write或者save方法保存图片,然后在读取图片的内容,这样很麻 ...

  8. Highcharts、AJAX、JSON、JQuery实现动态数据交互显示图表柱形图

    上个图给大家看下效果. 点击  查看图表 如下图展示效果 Highcharts简介 Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程 ...

  9. MapReduce初学习

    内容来源,工具下载:点此链接  点此链接 Mapreduce概述: MapReduce是一种分布式计算模型,主要用于搜索领域,解决海量数据的计算问题.MR是由两个阶段组成,Map和Reduce,用户只 ...

  10. JMS-activeMq发布订阅模式(非持久订阅)

    Publisher的代码: import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Deli ...