应要求需要删除xml文件中的空格,制表符等字符。要求双引号和xml的text属性中包含的空格不删除。

 bool delSpace(QFile &file, QString path)

 //删除file文件中的空格,双引号以及xml中text属性中的空格不删除。file为目标文件,path为新文件保存的路径及名称。
//操作成功true ,失败返回false
{
QByteArray qfile;
QTextStream in(&qfile);
char ch; //当前读入的一个字符
char tem;
qint64 position;//文件中存储当前读指针的临时变量 int ifg = ; //双引号的标记,值为1表示进入双引号范围;值为0表示不在双引号范围内
int ifgn = ; //找到xml中text属性的标记,值大于0表示找到text属性;值为0表示未找到text属性
int idel = ; //进入text属性的标记,值为1表示进入text属性范围;值为0表示不在text属性范围
int ibk = ; //退出外层循环标记 while(!file.atEnd())
{
file.read(&ch,); if((ifg == ) && (ifgn == ))
//当前不再双引号和text属性范围内
{
if(ch == '"')
{
ifg ++;
in << ch; }
else if((ch == ) || (ch == ) ||(ch == ) || (ch == ) || (ch == ))
{
continue;
}
else if(ch == '<')
{
in << ch;
position = file.pos(); //保存当前读指针,往后寻找text属性
while()
{
file.read(&tem, );
if(tem == '>')
{
ifgn ++;
while()
{
file.read(&tem, );
if(tem == '<')
{
ifgn ++;
file.read(&tem, );
if(tem == '/')
{
ifgn ++; //找到text属性,ifgn = 3
ibk = ; //退出外层循环
break;
}
else
{
ifgn = ; //未找到text属性,ifgn = 0
ibk = ; //退出外层循环
break;
}
}
else if(tem == '>') //寻找text属性失败
{
ifgn = ;
ibk = ;
break;
} }
if(ibk == )
{
file.seek(position);//退出寻找text属性,获取之前保存的读指针
break;
}
}
else if(tem == '/') //寻找text属性失败
{
ifgn = ;
file.seek(position);//退出寻找text属性,获取之前保存的读指针
break;
} }
}
else
{
in << ch;
} }
else if((ifg > ) && (ifgn == ))
//当前在双引号范围内,不再text属性范围内
{
if(ch == '"')
{
ifg--;
in << ch;
}
else if(ch == '<')
{
in << ch;
position = file.pos();
while()
{
file.read(&tem, );
if(tem == '>')
{
ifgn ++;
while()
{
file.read(&tem, );
if(tem == '<')
{
ifgn ++;
file.read(&tem, );
if(tem == '/')
{
ifgn ++; //找到text属性,ifgn = 3
ibk = ; //退出外层循环
break;
}
else
{
ibk = ; //未找到text属性,ifgn = 0
break; //退出外层循环
}
}
else if(tem == '>')
{
ifgn = ;
ibk = ;
break;
} }
if(ibk == )
{
file.seek(position);//退出寻找text属性,获取之前保存的读指针
break;
}
}
else if(tem == '/')
{
ifgn = ;
file.seek(position);//退出寻找text属性,获取之前保存的读指针
break;
} }
}
else
{
in << ch;
}
}
else if((ifg == ) && (ifgn > ))
//当前不在双引号范围内,在text属性范围内
{
if(idel == )
{
if(ch == '"')
{
ifg ++;
in << ch; }
else if((ch == ) || (ch == ) ||(ch == ) || (ch == ) || (ch == ))
{
continue;
}
else if(ch == '>')
{
in << ch;
idel++;
}
else
{
in << ch;
} }
else if(idel > )
{
if(ch == '<')
{
ifgn = ;
idel--;
in << ch; }
else if(ch == '"')
{
ifg ++;
in << ch; }
else
{
in << ch;
}
} }
else if((ifg > ) && (ifgn > ))
//当前在双引号和text属性范围内
{
if(idel == )
{
if(ch == '"')
{
ifg --;
in << ch; }
else if(ch == '>')
{
in << ch;
idel++;
}
else
{
in << ch;
} }
else if(idel > )
{
if(ch == '<')
{
ifgn = ;
idel--;
in << ch; }
else if(ch == '"')
{
ifg --;
in << ch; }
else
{
in << ch;
}
}
} } in.flush();
QFile file2(path);
if (file2.open(QFile::ReadWrite|QFile::Truncate))
{
file2.write(qfile);
}
else
{
return false;
}
file2.close();
return true;
}

删除XML文件中的空格的更多相关文章

  1. C# XML 文件中的空格值问题

    C# XML 文件中的空格值问题 运行环境:Window7 64bit,.NetFramework4.61,C# 6.0: 编者:乌龙哈里 2017-02-15 近期正在写我的简易标记文件格式的程序, ...

  2. C#程序中:如何删除xml文件中的节点、元素。

    C#中动态的清理xml文件中的垃圾信息是程序员必会的哦.这就像数据库一样,不会清理数据怎么可以呢?其实xml文件就可以用作一个小的数据库,存储一些简单的信息.所以,用C#程序实现xml文件的增.删.改 ...

  3. 批量删除xml文件中的<?xml version="1.0" ?>

    #!/bin/shcd 'home/usrname/'ls cd '/home/usrname/VOC2007/Annotations/' for file in `ls /home/usrname/ ...

  4. WEB项目web.xml文件中classpath: 跟classpath*:使用的区别

    引用一篇很不错的文章:http://blog.csdn.net/wxwzy738/article/details/16983935 首先 classpath是指 WEB-INF文件夹下的classes ...

  5. web.xml文件中加载顺序的优先级

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...

  6. 获取微信签名,并保存在xml文件中

    using System; using System.Linq; using System.Text; using System.Web; using System.Web.UI; using Sys ...

  7. 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)。 异步委托 微信小程序支付证书及SSL证书使用 SqlServer无备份下误删数据恢复 把list集合的内容写入到Xml中,通过XmlDocument方式写入Xml文件中 通过XDocument方式把List写入Xml文件

    通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的脾气秉性(二).   前言 读完上篇<通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的本质(一).>,相信大家对sp ...

  8. 把xml格式的字符串写入到一个xml文件中

    package demo; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; impo ...

  9. Struts2 | struts.xml文件中使用method属性和通配符简化action标签和Action处理类的编写

    转自:https://www.jianshu.com/p/310e89ee762d 在Struts2框架中,我们知道基本的Action标签只能实现一个url请求对应一个Action处理类.那么我们如果 ...

随机推荐

  1. C语言 知识点总结完美版

    本文采用思维导图的方式撰写,更好的表述了各知识点之间的关系,方便大家理解和记忆.这个总结尚未包含C语言数据结构与算法部分,后续会陆续更新出来,文中有漏掉的知识点,还请大家多多指正. 总体上必须清楚的: ...

  2. Qt-网易云音乐界面实现-8 主导航的实现-QtabWidget

    哎呀,堕落了,快有小两周没哟更新了,是在是没有动力了,浏览量连三位数都没有,是在是没有写下去的信心. 还有就是这个网易云音乐的代码量绝对是不可小视的,完全低估了这个软件的能量.昨天仔细想了一下,写不下 ...

  3. MOD 模除运算符

    用于奇数和偶数的校验,星期几的计算,以及其它专门的计算.

  4. Android Library和Android APP、Java Library的区别

    Android Library和Android APP.Java Library的区别 Android Library在目录结构上与Android App相同,它能包含构建APP所需的一切(如源代码. ...

  5. mysql批量新增或者更新

    1.批量更新或者新增 1.单个新增或者更新 keyProperty新增完之后返回Id值

  6. 《Redis设计与实现》阅读笔记(三)--链表

    链表 定义 链表分为两部分,链表节点和持有链表的list结构. 每个链表节点包含前置节点指针,后置节点指针,节点值void*用于保存各种不同类型的值 list结构包含表头节点指针,表尾节点指针,节点数 ...

  7. 前端基础css

    CSS主要学习的是选择器和样式属性. 导入css的方式:行内样式,内部样式,外部样式(推荐使用) 行内样式:在标记的style属性中设定CSS样式 <p style="color: g ...

  8. SSM搭项目报错:HTTP Status 400 – Bad Request

    具体报错如下: Type Status Report Description The server cannot or will not process the request due to some ...

  9. NIKTO介绍及使用方法

    1.    NIKTO:perl语言开发的开源WEB安全扫描器:识别网站软件版本:搜索存在安全隐患的文件:检查服务器配置漏洞:检查WEB Application层面的安全隐患:避免404误判(原因:很 ...

  10. 【Kubernetes】基于角色的权限控制:RBAC

    Kubernetes中所有的API对象,都保存在Etcd里,对这些API对象的操作,一定都是通过访问kube-apiserver实现的,原因是需要APIServer来做授权工作. 在Kubernete ...