在VC中调用MSXML库创建XML

利用VC++与MSXML解析XML文档 一、文档对象模型(DOM)  DOM是Document Object Model(文档对象模型)的简称,是对XML文档进行应用开发、编程的应用程序接口(API)。作为W3C公布的一种跨平台、与语言无关的接口规范,DOM提供了在不同环境和应用中的标准程序接口,可以用任何语言实现。  DOM采用对象模型和一系列的接口来描述XML文档的内容和结构,即利用对象把文档模型化。这种对象模型实现的基本功能包括: 阅读详情

//初始化 xml文档,添加根节点<DATA>
HRESULT InitXmlDOC(MSXML2::IXMLDOMDocumentPtr & pDoc,
                                     MSXML2::IXMLDOMElementPtr & ppRoot)
{
    HRESULT hr;
    hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30));
    AppendRootW(pDoc, ppRoot, _T("DATA")); //创建DATA 域 <DATA></DATA>

    return E_NOTIMPL;
}

 

//添加根节点
int AppendRootW(MSXML2::IXMLDOMDocumentPtr & pDoc,
                                  MSXML2::IXMLDOMElementPtr & pRoot,
                                  WCHAR * pRootName)
{
    BSTR bstrBuffer;
    bstrBuffer = SysAllocString(pRootName);
    //创建一个元素
    pDoc->raw_createElement(bstrBuffer, &pRoot);
  
    //把元素添加为节点
    pDoc->raw_appendChild(pRoot, NULL);
 SysFreeString(bstrBuffer);
    return 0;
}


//添加普通节点及值
int AppendElementW(MSXML2::IXMLDOMDocumentPtr & pDoc,
                                     MSXML2::IXMLDOMElementPtr & pRoot,
                                     WCHAR * pNodeName, WCHAR * pNodeValue,
                                     WCHAR * pAttribName, WCHAR * pAttribSize,
                                     WCHAR * pAttribCategory, WCHAR * pAttribDataId, WCHAR * pAttribFileVersion)
{
    BSTR bstrBuffer;
 BSTR nodestr;
    MSXML2::IXMLDOMElementPtr childNode;  //定义临时的节点元素

    // 创建节点
    bstrBuffer = SysAllocString(pNodeName);
    pDoc->raw_createElement(bstrBuffer, &childNode);  //创建一个元素
    SysFreeString(bstrBuffer);

    // 为节点添加属性
    if (pAttribName != NULL)
    {
  nodestr = SysAllocString(_T("n"));
        bstrBuffer = SysAllocString(pAttribName);
        childNode->setAttribute(nodestr,bstrBuffer);

        SysFreeString(bstrBuffer);
  SysFreeString(nodestr);
    }

 // 为节点添加属性-大小
    if (pAttribSize != NULL)
    {
  nodestr = SysAllocString(_T("s"));
        bstrBuffer = SysAllocString(pAttribSize);
        childNode->setAttribute(nodestr, bstrBuffer);

        SysFreeString(bstrBuffer);
  SysFreeString(nodestr);

    }


 // 为节点添加属性-Category
    if (pAttribCategory != NULL)
    {
  nodestr = SysAllocString(_T("c"));
        bstrBuffer = SysAllocString(pAttribCategory);
        childNode->setAttribute(nodestr,bstrBuffer);

        SysFreeString(bstrBuffer);
  SysFreeString(nodestr);
    }


 // 为节点添加属性-数据ID
    if (pAttribDataId != NULL)
    {
  nodestr = SysAllocString(_T("id"));
        bstrBuffer = SysAllocString(pAttribDataId);
        childNode->setAttribute(nodestr,bstrBuffer);

        SysFreeString(bstrBuffer);
  SysFreeString(nodestr);
    }

 // 为节点添加属性-数据版本号
 if (pAttribFileVersion != NULL)
 {
  nodestr = SysAllocString(_T("v"));
  bstrBuffer = SysAllocString(pAttribFileVersion);
  childNode->setAttribute(nodestr,bstrBuffer);

  SysFreeString(bstrBuffer);
  SysFreeString(nodestr);
 }

    // 为节点添加文字
    if (NULL != pNodeValue)
    {
        bstrBuffer = SysAllocString(pNodeValue);
        childNode->Puttext(bstrBuffer);
        SysFreeString(bstrBuffer);
    }

    // 把节点(childNode)加到父节(pRoot->xmlRoot)点下
    pRoot->appendChild(childNode);
    childNode.Release();
    return 0;
}

//从xml data中读出Text,*pXMLStr指向XML字符串并加载,取得节点(*pNodeName)之间的文字(*pText)
int CAuxiliaryExeDlg::GetElementTextW(WCHAR * pXMLStr, WCHAR * pNodeName,
           WCHAR *pXpath, CStringArray * pText)
{
    MSXML2::IXMLDOMDocumentPtr pDoc1;
    MSXML2::IXMLDOMNodePtr pNode1;
    BSTR    bstrBuffer, xpath;
    HRESULT         nRet1, hr;

    //建立xml(xml3.0)文档对象
    hr = pDoc1.CreateInstance(__uuidof(MSXML2::DOMDocument30));

    if (!SUCCEEDED(hr))
    {
#ifdef zzclog
   TRACE(_T("Creat xml object failed!/n"));
  WriteLogFile(_T("Creat xml object failed!/n"));
#endif
        return 1;
    }

    //加载XML字符串
    bstrBuffer = SysAllocString(pXMLStr);
    nRet1 =pDoc1->loadXML(bstrBuffer);
    SysFreeString(bstrBuffer);

    //选择指定节点, 在树中查找名为bstrBuffer的节点,"//"表示在任意一层查找
    bstrBuffer = SysAllocString(pNodeName);
    //得到指定的节点
    pNode1 = (MSXML2::IXMLDOMNodePtr)(pDoc1->selectSingleNode(bstrBuffer));
    SysFreeString(bstrBuffer);

    //取多个文档,xpath
    xpath = SysAllocString(pXpath); 
    MSXML2::IXMLDOMNodeListPtr   pNodeList = pDoc1->selectNodes(xpath);
    SysFreeString(xpath);
    pNodeList->reset();

    bool findflag = false;
    for (int i = 0;i <pNodeList->Getlength() ;i++)
    {
        CString strTemp;
        pNodeList->get_item(i,&pNode1);
  BSTR strRequestType=pNode1->Gettext();
  strTemp = (CString)strRequestType;
        pText->Add(strTemp);
        findflag = true;
  SysFreeString(strRequestType);
    }

    //释放资源
    if (pDoc1 !=NULL)
    {
        pDoc1.Release();
    }
    if (pNode1 != NULL)
    {
        pNode1.Release();
    }

    if (findflag)
    {
        pNodeList.Release();
    }
    return 0;
}

 

//使用

 

MSXML2::IXMLDOMElementPtr xmlRoot = NULL;

MSXML2::IXMLDOMDocumentPtr pDoc = NULL;

WCHAR pErrCode[16];

char pReplyBuf[1024];

 

/* 初始化XML文档对象 */
 InitXmlDOC(pDoc, xmlRoot);

 AppendElementW(pDoc, xmlRoot, L"test", pErrCode, NULL, NULL, NULL,NULL, NULL);

 

//xml to char

 

/* 把xml转成BSTR串 */
 pDoc->get_xml(&bstrXML);

 //转成UNICODE
 wcscpy((WCHAR *)pReplyBuf, bstrXML);
 int xmlLen = ::SysStringLen(bstrXML);

 

/* 释放 */
 pDoc.Release();
 xmlRoot.Release();

 

程序发布的时候要把动态库也要发布.使用开源的XML库也是一个很好的选择.

VC++中使用MSXML组件解析XML文件 本文还有配套的精品资源,点击获取 简介:在VC++开发环境中,使用MSXML组件可以有效地读取和操作XML文件。MSXML组件允许开发者通过COM接口与XML文档交互,支持创建 IXMLDOMDocument 对象来加载和解析XML数据。本文介绍如何通过包含 msxml2.h 头文件,链接 msxml2.lib 或 msxm... 阅读详情

相关推荐

VC 读写XML文件类库

XML文件的读写操作类封装的代码, 可以根据XML文件格式进行灵活的读写操作、获取标签、节点的属性等……

MSXML各种纠结问题

用微软的解析,用的 30的document,修改节点和查询节点:   首先SUCCEEDED(pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30) 创建,加载文档 有了文档,就可以获取节点了。 用getElementsBy

wildwild1的专栏 3060

人形机器人系列——硬件介绍

人形机器人是多领域交叉技术的产物,主要由三大系统组成:感知系统、决策系统和执行系统。感知系统感知系统是人形机器人获取外界信息的途径,主要由各种传感器组成。其中,视觉传感器用于获取图像信息,如摄像头、激光雷达等;触觉传感器用于感知触碰和压力,如力/力矩传感器、声学传感器等。这些传感器收集到的信息为机器人的决策和执行提供基础。决策系统决策系统是人形机器人的大脑,负责处理和决策各种信息。它由芯片和算法组成。芯片是硬件基础,提供计算能力;算法是软件基础,用于处理和分析传感器收集到的信息,并做出相应的决策。执行系统。

liangwqi的博客 1万+

VC++6.0利用 IXMLDOMDocumentPtr,IXMLDOMElementPtr生成XML文档

可以新建一个基于MFC对话框的应用程序,在头文件或者开头处加入#import msxml4.dll 然后在界面上加一个按钮,添加按钮事件处理 运用库函数来生成xml文档     MSXML2::IXMLDOMDocumentPtr pDoc;     MSXML2::IXMLDOMElementPtr xmlRoot ;     HRESULT hr;      ::CoInitialize(NULL);//初始化COM环境   一定要加   不要忘记!!!       /

xt_chaoji的专栏 6232

视频监控设备(NVR、IPC等)如何通过国标GB28181接入到视频监控平台,以及接入过程如何测试视频接入是否成功

GB/T28181标准广泛的应用,视频监控设备通过国标GB28181接入视频监控平台的过程变成程序化、标准化的互联过程,确保了视频监控设备能够在不同系统、不同网络环境下实现远程、跨区域、跨级别的访问和控制。版本有GB28181-2011、2016、2022几个常用版本,威迪斯特的视频监控平台完全支持GB28181的这几个版本,能够实现不同品牌视频监控设备的国标视频接入(国标视频监控接入),或者为国标28181视频接入(国标28181视频监控接入),也为国标281818接入(国标GB/T28181接入。

weixin_70208651的博客 1万+

三、使用HM进行简单的视频隐写demo

三、使用HM进行简单的视频隐写前言一、实验环境二、实验思路三、实验过程3.1 提取原始载体3.2 使用LSB隐写算法进行隐写3.3 放回含密载体3.4 提取含密载体3.5 使用LSB提取算法进行比对四、碰到的问题以及解决思路4.1 块的结构体发生变化4.1.1 产生的原因4.1.2 解决方法4.2 一个有趣的现象4.2.1 产生的原因4.3 视频产生较大失真4.3.1 产生的原因4.3.2 解决方法五、总结 前言 在前两篇博客中介绍了基于HEVC/H.265视频编解码器的视频隐写的基本思路,本文将详细记录

杨酬勤的博客 1795

VC++使用 MSXML库

【代码】VC++使用 MSXML库。

自学C++,会写HelloWorld 1264

MPU6050 加速度计和陀螺仪传感器与 Arduino 的接口

虽然该模型并不能准确代表现实世界中加速度计传感器的构建方式,但它通常有助于理解为什么加速度计的输出信号通常以 ±g 为单位指定,或者为什么加速度计在静止时在 z 轴上的读数为 1g,或者在不同方向上您可以期望得到什么样的加速度计读数。该模块的核心是低功耗、低成本的 6 轴运动跟踪芯片 MPU6050,它将 3 轴陀螺仪、3 轴加速度计和数字运动处理器 (DMP) 集成到一个 4mm x 4mm 的微型芯片中。小时候,科学博览会上的陀螺仪总是让我们感到惊讶,因为它们以奇怪的方式移动,甚至似乎违背了重力。

sxstj的博客 9933

VC中调用MSXML库创建XML

HRESULT InitXmlDOC(MSXML2::IXMLDOMDocumentPtr & pDoc,                                     MSXML2::IXMLDOMElementPtr & ppRoot){    HRESULT hr;    hr = pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument30

Hao的专栏 865

ARM Memory Compiler实战指南:从参数配置到GDSII生成的全流程解析

本文详细解析了ARM Memory Compiler在SRAM设计中的全流程应用,从基础参数配置到GDSII文件生成。涵盖SRAM类型选择、核心参数配置策略、高级优化技巧及TSMC 28nm工艺下的实战案例,帮助IC设计工程师高效实现存储器模块的优化设计。

game4的博客 418

从CT扫描到3D模型:手把手教你用NII文件在3D Slicer中重建脊柱(附Verse数据集实战)

本文详细介绍了如何利用NII文件在3D Slicer中从CT扫描数据重建脊柱3D模型的全流程,包括环境配置、数据获取、方向校准、结构分割和模型优化等关键步骤。通过Verse数据集实战演示,帮助医学从业者快速掌握医学图像处理技术,提升临床诊疗与教学效率。

weixin_42651281的博客 203

VC++和MSXML解析XML文档

最近研究起了使用VC6.0进行解析XML文档,而对于XML文档的解析目前网上主要使用了两种方法:MSXML和CMarkUp类。而我就先从最基本的DOM研究起了。而对于DOM主要采用微软提供的MSXML库,另外好像还有第三方库TinyXML,咱就不研究了。而对于MSXML的使用,网上别人提供的东西都比较零碎,而且还比较乱,在论坛上问反而被一堆人鄙视,得到的解答少之又少。于是我专门花了一天的时间研究了下,现在小有成果,就感觉整理了一些,以供和我一样初级选手作为入门的资料。当然,在整理过程中还是会出现错误,望大家

韵苑23栋工作室 2965

Bugku中的source

进入环境后 我们首先查看源码可以得到一个flag 这肯定是个假的(已经提交过了确实是个假的) 题目提示要用Linux 这里使用的是kali 我们首先dirsearch一下这个网站 可以看到有.git文件泄露 也可以点开那个链接但是在里面没有找到flag 然后选择下载这个.git文件 然后进入这个文件夹 输入git reflog查看文件状态 可以看到有四个都有flag is here 一个一个查看git show 然后在40c6d51中发现了我们需要的fl

A272036149的博客 1013

MFC操作XML配置文件的两种方式:DOM 和 MSXML

这几天做VC项目涉及到了创建xml配置文件这方面的问题,纠结了好多天,尝试了N种方法,终于完成了工作任务,现在和大家分享下:  我参考了如下的资料: XML DOM 实例:http://www.w3school.com.cn/example/xdom_examples.asp VC++中操作XML(MFC、SDK):http://www.cnblogs.com/lingyun1120/arc

hediping9811的专栏 4460

富芮坤FR801xH蓝牙协议栈启动流程和notify实现温度数据主动上传

文章目录一、蓝牙协议栈启动流程1.1 初始化代码1.2 初始化流程1.3 回调函数里的初始化二、notify实现2.1 notify介绍2.2 notify实现2.3.1 定义数据2.3.2 获取连接号conidx2.3.3 gatt_notification函数的使用三、notify温度上传测试3.1 蓝牙调试工具3.2 蓝牙调试器设置3.3 测试结果四、参考链接   基于sdk开发的好处是方便项目的快速落地,现在用的是SDK里面的源文件,目前只是学习FR801xH芯片的特性,裁剪这个SDK需要点时间,

weixin_43810563的博客 4320

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

vc6.0 下利用MSXML对xml文件的基本操作

1:#import "msxml4.dll"          //加入导入库2:AfxOleInit();                           //初始化com组件3:void OnCreate() { // TODO: Add your control notification handler code hereMSXML2::IXMLDOMDocumentPtr

小石头的专栏 5483

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

VC读写XML文件

1、安装MSXML 4.0 SP2。在VC6中建立一个基于Dialog的工程。如图:在界面上放置3个编辑框、1个按钮控件。其中属性设置如下。编辑框: ID Category Variable Type Variable Name

坚持到底 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

利用MSXML解析XML文本(VC)

利用MSXML解析XML文本(VC)http://www.blog.edu.cn/user1/122/archives/2004/291.shtml 一、引言  当前Web上流行的剧本语言是以HTML为主的语言结构,HTML是一种标记语言,而不是一种编程语言,主要的标记是针对显示,而不是针对文档内容本身结构的描述的。也就是说,机器本身是不能够解析它的内容的,所以就出现了XML语言。XM

JamesXing的专栏 1444

VC++ MSXML创建XML文件以及对XML文档解析

VC++ MSXML创建XML文件以及对XML文档解析 转自http://www.newxing.com/Tech/Program/Cpp/703.html // XmlCreationDemo.cpp #include <stdlib.h> #include <stdio.h> // 引入MS...

weixin_34032792的博客 286

VC 使用MSXML创建新结点时出现xmlns="" 属性解决方法

在VC中使用MSXML创建xml文件,在使用下面代码: 问题原因:当父节点具有XMLNS属性时,子节点必须指定XMLNS属性,但是当子节点的XMLNS属性与父节点命名空间相同时,子节点不显示XMLNS属性. 上面问题的根本所在就是我们理解上的错误,我们认为没有为子节点指定命名空间,就不应该出现此属性,恰恰相反,当我们为其指定与父节点相同的命名空间时,此属性才不会出现 那么如何去掉

hjpcb的专栏 1405

VC++中利用MSXML解析XML、使用DOM写XML文档

CoInitialize(NULL); // 初始化COM。 CComPtr<IXMLDOMDocument> spXMLDOM; // 创建解析器实例。 HRESULT hr = spXMLDOM.CoCreateInstance (__uuidof(DOMDocument)); VARIANT_BOOL bSuccess = false; // 装载XML文档。 hr = spXMLDOM->load(CComVariant(L"xmlfile.xml"), &..

thanklife的专栏 1959

VC简单调用MSXML

首先 安装msxml sdk   1、包含头文件 #include #include #pragma comment(lib, "comsuppw.lib") 2、例子代码 CComPtr pDoc; HRESULT hr

TXH0001的专栏 1018

VC使用MSXML.dll读取XML文件

XML最近被吹的神乎其神,很多数据的交换,包括很多中间件系统,WebService,软件的配置文件,都是在用XML这个技术,的确是个好东西,下面写了个读取XML的代码片段,用的是MSXML的一些接口。读的是BT软件的配置文件,XML内容如下:

2431

VC使用MSXML解析XML文档

VC使用MSXML解析XML文档 第一部分:DOM解析:       概述:DOM解析将会把一个完整的XML文档读进来,生成一个结构树。这样会要把XML文档全部都加载到内在中。所以解析起来的速度会要慢一些。     1、如何加载xml文件:          //创建DOM,加载XML文档          MSXML::IXMLDOMDocumentPtr pCommandDoc;     ...

深之JohnChen的专栏 9186

vc中使用MSXML2的注意点

MSXML2能够很好地处理xml文件,不过也有些需要注意的点 1.MSXML2的加载和释放 loadIndexXml(TCHAR * indexdir) { if (NULL == indexdir){ return NULL; } ::CoInitialize(NULL); MSXML2::IXMLDOMDocumentPtr doc; doc.CreateInst...

weixin_33713503的博客 840
上一篇: char ,unsigned char与 WCHAR
下一篇: 函数中堆内存写越界问题
nitghost
博客等级 码龄19年 32粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值