程序是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 ;
}

运行后的效果

最新文章

  1. Access-Control-Allow-Origin与跨域问题
  2. animation-fill-mode的一些思考
  3. JAVASCRIPT实现简单计算器
  4. 在MySql 5.0 的表里同时添加两个自动更新的timestamp字段
  5. Vim配置及说明——IDE编程环境
  6. Hbase之测试数据
  7. 【架构】生成全局唯一ID的3个思路,来自一个资深架构师的总结
  8. Shell_Oracle Erp基于主机文件Host开发详解(案例)
  9. Objc基础学习记录5
  10. 一款基于jQuery饼状图比例分布数据报表
  11. Subline Text默认设置文件Preferences.sublime-settings—Default详解
  12. android87 Service
  13. Android自定义控件实战——水流波动效果的实现WaveView
  14. 微信小程序之----加载中提示框loading
  15. foreach循环中为什么不要进行remove/add操作
  16. KVM的安装使用
  17. iview库表table组件内嵌套Select组件
  18. git 常用操作,下拉,提交,更新,还原
  19. CIFS 与 SMB 有什么区别?
  20. MongoDB 和 NoSQL简介

热门文章

  1. Linux下判断字符串长度
  2. Chrome DevTools 代码覆盖率功能详解
  3. Install and Enable Telnet server in Ubuntu Linux
  4. nginx+php-fpm页面显示空白的解决方法
  5. iOS:Masonry 英文原档介绍
  6. vue-resource基本使用方法
  7. 常见Hibernate报错处理:出现“org.hibernate.QueryException: could not resolve property”和 is not mapped和could not locate named parameter错误的解决
  8. 实现一个Cglib代理Demo
  9. Excel 对应.xml/.ftl 配置(中爆导出范文)
  10. 安装Python的机器学习包Sklearn 出错解决方法