C++解析XML字符串
项目交互遇到了需要VC++中解析XML字符串,故花了点时间了解了下VC++中解析XML的诸多方法主要包括三种:msxml(微软提供)、markup、TinyXml。
开始花了点时间使用msxml3,虽然也能解析出来数据,不过对数据的精细化处理个人感觉有点麻烦,最终选择了markup.
采用markup可以直接在http://www.firstobject.com/下载示例,把示例中的Markup.h、Markup.cpp拷贝到自己的项目目录中,并添加到项目中,这样就可以
使用其中的CMarkup类进行XML的相关操作了。
在使用CMarkup类时,需要添加头文件包含其头文件,本例采用list结构体进行xml数据的接收,故头文件包含如下:
#ifndef _XML_H
#define _XML_H
#include "Markup.h"
#include <string>
#include <list>
具体解析则需要根据项目需求进行相关操作,本例主要是解析xml固定节点下子节点数据集:
void AnalyseFeatureTolist(char *pszXml,list<student_item_t> *lst)
{
CMarkup xml;//实例化CMarkup
xml.SetDoc((const char*)pszXml);
xml.ResetMainPos();
student_item_t pstItem;
if(xml.FindElem("Root"))
{
xml.IntoElem();//此句必须加上,进入到节点中才能继续查找
while(xml.FindElem("data"))
{
xml.IntoElem();
if(xml.FindElem("NO")){
pstItem.NO = _ttoi(xml.GetData());
}
if(xml.FindElem("NAME")){
strcpy(pstItem.NAME,xml.GetData());
}
if(xml.FindElem("SEX")){
strcpy(pstItem.SEX,xml.GetData());
}
if(xml.FindElem("REMARK")){
strcpy(pstItem.REMARK,xml.GetData());
}
lst->push_back(pstItem);
xml.OutOfElem();//跳出节点
}
xml.OutOfElem();
}
}
其中student_item_t pstItem;为定义的结构体,用来接收数据接收单条数据。
以上就是C++中通过markup解析xml字符串的操作示例,markup还有其他更多操作XML的功能,根据项目不同要求可以进行扩展了解。
C++解析XML字符串的更多相关文章
- tinyXml直接解析XML字符串
一直都用tinyxml直接LoadFile来解析XML,发现原来也可以直接解析XML字符串. XML文件: <?xml version=\"1.0\" encoding=\& ...
- 解析xml字符串时报“前言中不允许有内容”错误。
一,问题出现经过: j基于java语言webservic服务端接收客户端 传来的xml字符串用 解析时总报:org.dom4j.DocumentException: Error on line 1 o ...
- dom4j解析xml字符串实例
DOM4J 与利用DOM.SAX.JAXP机制来解析xml相比,DOM4J 表现更优秀,具有性能优异.功能强大和极端易用使用的特点,只要懂得DOM基本概念,就可以通过dom4j的api文档来解析xml ...
- java解析xml字符串(用dom4j)
package com.smsServer.Dhst; import java.util.HashMap; import java.util.Iterator; import java.util.Ma ...
- java解析xml字符串为实体(dom4j解析)
package com.smsServer.Dhst; import java.util.HashMap; import java.util.Iterator; import java.util.Ma ...
- .NET解析xml字符串,通过反射给实体类对象赋值,获取实体类数据列表
/// <summary> /// 解析xml字符串 转换为实体类列表数据 /// </summary> /// <param name="xmlStr&quo ...
- ORACLE 解析xml字符串-转载的
--------------------------方法一------------------------------------- 1.xml字符串 /* <orderlist> ...
- java解析xml字符串方法
一,用DOM4J 针对无重复标签的xml字符串格式,如下: 针对此种情况可用DOM4J解析法,引入 dom4j的相关jar包代码如下: Document document=DocumentHelpe ...
- dom4j递归解析XML字符串所有子节点
/** * dom4j递归解析所有子节点 * * @param childElements * @param mapEle * @return */ public Map<String, Obj ...
随机推荐
- 负载均衡(二)DNS负载均衡
一.DNS原理及解析过程详解 相信大家在平时工作中都离不开DNS解析,DNS解析是互联网访问的第一步,无论是使用笔记本浏览器访问网络还是打开手机APP的时候,访问网络资源的第一步必然要经过DNS解析流 ...
- redis面试题集錦
1为什么Redis需要把所有数据放到内存中? Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘.所以Redis具有快速和数据持久化的特性.如果不将数据放到内存中,磁盘 ...
- 如何编译Java程序以及运行程序
一.编辑运行 二.HelloWorld程序的组成: 三.public static void main(String[] args){} 四.System.out.println("Hell ...
- git初步研究2
$git init Git 使用 git init 命令来初始化一个 Git 仓库,Git 的很多命令都需要在 Git 的仓库中运行,所以 git init 是使用 Git 的第一个命令. 在执行完成 ...
- Oracle RAC业务bug导致部分数据丢失处理
问题描述:业务部门在10月26日发现某张基础表中丢失部分数据,系为9月份录入系统的基础数据丢失 Oracle RAC环境做的RMAN备份,10月18日做过expdp数据泵备份,丢失数据表名为T_GL_ ...
- LTM_本地流量管理(一)
基本元素及概念 Node:节点,即服务器的IP地址. Member:成员,即一个服务,用IP+端口表示. Pool:池:一个或多个Member的逻辑分组,一个Pool表示一个应用,每个Pool都有自己 ...
- Bugku 杂项 telnet
letnet 下载zip后发现是一个数据包,放到wireshark中打开 右键追踪tcp流后可以发现flag
- sh_03_注释
sh_03_注释 # 这是第一个注释 print("hello hello") """ 这是一个多行注释 .... .... .... 注释结束了 & ...
- 【BZOJ1563】诗人小G(决策单调性DP)
题意:给定N,L,P,求f[N] sum[i]递增,L<=3e6,P<=10 思路:四边形不等式的证明见https://www.byvoid.com/zhs/blog/noi-2009-p ...
- PC端无论页面有没有完全撑开把footer保持在最底部(不用定位)
最近在写项目,有的页面没有占到一屏,然后footer也就是底部就靠上了,这样很影响美观,于是在网上找了找,下面是我的成果 解决该问题的最好方法是采用CSS3提供的一种先进布局模型 :flexbox,可 ...