避免tcp接收xml数据时加上xml数据长度,根据xml数据特点来解析recv到的xml数据

 int nPos1 = 0;
int nPos2 = 0;
int nTempPos = 0;
int nXmlParseStep = 0;
std::string strRequest;
std::string strXmlNode;
char szXmlData[1024] = {0}; strcpy(szXmlData, "<?xml version=\"1.0\"?><Alarmstatus Num=1><Item><DeviceID></DeviceID><DutyStatus>OFFDUTY</DutyStatus></Item></Alarmstatus>"); int nXmlLen = strlen(szXmlData); strRequest += std::string(szXmlData, nXmlLen);
if(nXmlParseStep == 0) //找到xml header <?xml version="1.0"?>
{
nPos1 = strRequest.find("<?", 0);
if(nPos1 != std::string::npos)
{
nPos2 = strRequest.find("?>", nPos1+1);
if(nPos2 != std::string::npos)
nXmlParseStep = 1;
}
} if(nXmlParseStep == 1)
{
nPos1 = strRequest.find("<", nPos2+1);
if(nPos1 != std::string::npos)
{
nPos2 = strRequest.find(">", nPos1+1);
if(nPos2 != std::string::npos)
{
nXmlParseStep = 2;
nTempPos = strRequest.find(" ", nPos1+1); //避免有子属性,如<Alarmstatus Num=1>
if(nTempPos == std::string::npos)
strXmlNode = strRequest.substr(nPos1+1, nPos2-nPos1-1);
else
strXmlNode = strRequest.substr(nPos1+1, nTempPos-nPos1-1);
}
}
} if(nXmlParseStep == 2)
{
nPos1 = strRequest.find("</"+strXmlNode+">", nPos2+1);
if(nPos1 != std::string::npos)
{
nXmlParseStep = 0;
nPos1 = nPos2 = 0;
strRequest.erase(0, std::string::npos);
}
}

tcp接收xml数据解析的更多相关文章

  1. iOS - XML 数据解析

    前言 @interface NSXMLParser : NSObject public class NSXMLParser : NSObject 1.XML 数据 XML(Extensible Mar ...

  2. xml数据解析调研

    XML数据解析http://www.tuicool.com/articles/Nraau2(必用) http://www.cnblogs.com/pengyingh/articles/2342699. ...

  3. iOS开发——网络Swift篇&JSON与XML数据解析

    JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit)   一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SD ...

  4. xml数据解析

    xml数据解析 在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML.TouchXML.Kiss ...

  5. iOS开发网络篇之Web Service和XML数据解析

    郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 假设文章对您有所帮助,欢迎给作者捐赠,支持郝萌主.捐赠数额任意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源代码下载:点我传送 游戏官方下 ...

  6. 关于C#对Xml数据解析

    首先进行简单说明Xml 与Html  和 XAML数据标签的差别. 1.Xml属于数据文本, 被设计为传输和存储数据,其焦点是数据的内容.它与json格式数据相似,可作为服务数据传输类型. 其中XML ...

  7. 二、Android XML数据解析

    XML,可扩展标记语言.可以用来存储数据,可以看做是一个小型的数据库,SharedPreference就是使用XML文件存储数据的,SQLite底层也是一个XML文件,而在网络应用方面,通常作为信息的 ...

  8. 玩转iOS开发 - JSON 和 Xml 数据解析

    前言 Json 和xml是网络开发中经常使用的数据格式,JSON轻量级.xml相对较复杂.所以如今用JSON的比例很大.基本上从server获取的返回数据都是JSON格式的,作为iOS开发人员,解析J ...

  9. (四)XML基础(客户端和服务端发送与接收xml数据)

    案例: index.jsp <%@ page language="java" import="java.util.*" pageEncoding=&quo ...

随机推荐

  1. perl学习(4) 子程序

    子程序,类比c语言中的函数,在形式上个人认为最大的区别:没有形参 1.1.定义子程序 1.2.调用 #! /usr/bin/perl sub marine { $n += 1 ; print &quo ...

  2. POJ 3518 Prime Gap(素数题)

    [题意简述]:输入一个数,假设这个数是素数就输出0,假设不是素数就输出离它近期的两个素数的差值,叫做Prime Gap. [分析]:这题过得非常险.由于我是打的素数表. 由于最大的素数是1299709 ...

  3. android -- 蓝牙 bluetooth (三)搜索蓝牙

    接上篇打开蓝牙继续,来一起看下蓝牙搜索的流程,触发蓝牙搜索的条件形式上有两种,一是在蓝牙设置界面开启蓝牙会直接开始搜索,另一个是先打开蓝牙开关在进入蓝牙设置界面也会触发搜索,也可能还有其它触发方式,但 ...

  4. java生成压缩图

    链接地址:http://blog.sina.com.cn/s/blog_407a68fc0100nrba.html package util; import java.awt.image.Buffer ...

  5. java面向对象中的String类中12种常用的方法

    1.字符串与字符数组的转换 字符串可以使用toCharArray()方法变成一个字符数组,也可以使用String类的构造方法把一个字符数组变成一个字符串. public class StringAPI ...

  6. 处理IIS报“由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面”

    “由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面” 详细错误:HTTP 错误 404.2 - Not Found. 由于 Web 服务器上的“ISAPI 和 C ...

  7. linux mount挂载设备(u盘,光盘,iso等 )使用说明

    对于新手学习,mount 命令,一定会有很多疑问.其实我想疑问来源更多的是对linux系统本身特殊性了解问题. linux是基于文件系统,所有的设备都会对应于:/dev/下面的设备.如: [cheng ...

  8. sass玩转颜色总结笔记

    变量: $color:#f00; 1.变浅和加深颜色,sass使用HSL标准来变浅或加深颜色 lighten($color,10%); darken($color,30%);             ...

  9. SDUTOJ 2128 树结构练习——排序二叉树的中序遍历

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvUl9NaXNheWE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...

  10. SDCard助手类

    package com.zyh.sdcardHelper; import java.io.BufferedInputStream; import java.io.BufferedOutputStrea ...