程序是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. MathType插入带序号公式的两种方法

    方法一: 由于我之前使用表格15% 70% 15%来布局的,所以最开始相的就是如何录入公示后插入公式序号,如下图所示 先设置序号格式 录好公式后点“Insert Number”就好了,这样的话需要紧挨 ...

  2. Android Studio打包:“APP_NAME" IS NOT TRANSLATED IN ZH, ZH_CN……..解决办法

    开始用Android Studio更新到2.0稳定版,调试的时候没啥问题,在打包的时候出现了"app_name" is not translated in zh, zh_CN….. ...

  3. javascript字符串处理方法

    字符串处理方法 1.字符串合并操作:“ + ”2.parseInt() 将数字字符串转化为整数3.parseFloat() 将数字字符串转化为小数4.split() 把一个字符串分隔成字符串组成的数组 ...

  4. pl/sql游标

    通过游标,我们可以取得返回结果集的任何一行记录,提高效率. 定义游标: type 游标名 is ref cursor 变量名 游标名 打开游标: open 游标变量 for select语句: 取出当 ...

  5. Nginx 报错413 Request Entity Too Large 上传文件过大

    1.进入Nginx安装路径下的conf文件夹中(我的路径是:/usr/local/nginx/conf) 2.打开nginx.conf,在http大括号中第一行加语句:client_max_body_ ...

  6. How to backup a remote PostgreSQL db and restore it locally?

    pg_dump and pg_restore 来备份和恢复数据库中的数据. 原文:  https://ksearch.wordpress.com/2012/09/28/how-to-backup-a- ...

  7. onbeforepaste事件用法

    onkeyup="value=value.replace(/[^\d]/g,'')" onbeforepaste="clipboardData.setData('text ...

  8. MoveSessionRestore.bat for firefox

    move "c:\Documents and Settings\leon\Application Data\Mozilla\Firefox\Profiles\eyr6cp34.default ...

  9. C#和Java中字符串的异同

    字符串 在底层上跟C#类似,每个字符串的实例都不可修改.当修改字符串变量时,是将变量指向新的字符串实例,而不是修改原本的实例.Java中也有字符串池机制. 注意:使用 == 运算符比较字符串时,跟C# ...

  10. Django——基于类的视图源码分析 一

    基于类的视图(Class-based view)是Django 1.3引入的新的视图编写方式,用于取代以前基于函数(Function-based)方式. 借助于OO和Python中方便的多重继承特性, ...