删除XML文件中的空格
应要求需要删除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文件中的空格的更多相关文章
- C# XML 文件中的空格值问题
C# XML 文件中的空格值问题 运行环境:Window7 64bit,.NetFramework4.61,C# 6.0: 编者:乌龙哈里 2017-02-15 近期正在写我的简易标记文件格式的程序, ...
- C#程序中:如何删除xml文件中的节点、元素。
C#中动态的清理xml文件中的垃圾信息是程序员必会的哦.这就像数据库一样,不会清理数据怎么可以呢?其实xml文件就可以用作一个小的数据库,存储一些简单的信息.所以,用C#程序实现xml文件的增.删.改 ...
- 批量删除xml文件中的<?xml version="1.0" ?>
#!/bin/shcd 'home/usrname/'ls cd '/home/usrname/VOC2007/Annotations/' for file in `ls /home/usrname/ ...
- WEB项目web.xml文件中classpath: 跟classpath*:使用的区别
引用一篇很不错的文章:http://blog.csdn.net/wxwzy738/article/details/16983935 首先 classpath是指 WEB-INF文件夹下的classes ...
- web.xml文件中加载顺序的优先级
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- 获取微信签名,并保存在xml文件中
using System; using System.Linq; using System.Text; using System.Web; using System.Web.UI; using Sys ...
- 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)。 异步委托 微信小程序支付证书及SSL证书使用 SqlServer无备份下误删数据恢复 把list集合的内容写入到Xml中,通过XmlDocument方式写入Xml文件中 通过XDocument方式把List写入Xml文件
通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的脾气秉性(二). 前言 读完上篇<通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的本质(一).>,相信大家对sp ...
- 把xml格式的字符串写入到一个xml文件中
package demo; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; impo ...
- Struts2 | struts.xml文件中使用method属性和通配符简化action标签和Action处理类的编写
转自:https://www.jianshu.com/p/310e89ee762d 在Struts2框架中,我们知道基本的Action标签只能实现一个url请求对应一个Action处理类.那么我们如果 ...
随机推荐
- python中while循环和for循环的定义和详细的使用方法
1. 循环的定义,反复做某事,具有明确的开始和结束. 2. 在Python中循环有while和for两种方式: While循环:1) 语法结构 >>> while 条件: ... ...
- SICP读书笔记 2.1
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- Git知识点整合
Git安装 Windows上安装Git 64 位安装包下载地址 : https://github.com/git-for-windows/git/releases/download/v2.16.2.w ...
- umount命令详解
基础命令学习目录首页 umount 用来卸载设备 -a:卸除/etc/mtab中记录的所有文件系统: -h:显示帮助: -n:卸除 ...
- 一次ajax调用,发送了两次请求(一次为请求方法为option,一次为正常请求)
在项目了开发时遇见一个奇怪的现象,就是我在js里面发送一次ajax请求,在浏览器network那边查询到的却是发送了两次请求,第一次的Request Method参数为OPTIONS,第二次的Requ ...
- centos7安装oracle亲测可用
http://www.linuxidc.com/Linux/2016-04/130559p2.htm
- Redux和React-Redux的实现(一):Redux的实现和context
react使用redux做状态管理,实现多个组件之间的信息共享,解决了父子组件.兄弟组件之间的复杂通信问题.vue有vuex,总之是一种flux的思想.react提供了react-redux这个库,一 ...
- (第十周)新NABCD
项目名:食物链教学工具 组名:奋斗吧兄弟 组长:黄兴 组员:李俞寰.杜桥.栾骄阳.王东涵 新的NABCD模型: Need:可以辅助教师课堂讲授食物链相关的知识.软件的界面要漂亮,操作要简单,要给出软件 ...
- 20135316王剑桥 linux第四周课实验笔记
第三章 程序的机器级表示 3.1历史观点 Intel处理器的换代:8086——80286——i386——i486——Pentium——PentiumPro——PentiumII——PentiumIII ...
- Linux环境下服务器环境搭建-mysql
下载对应版本的mysql.rpm(Linux 6 安装el6 Linux 7 安装el7) 安装环境 centos 7,安装版本mysql57-community-release-el7-9.noar ...