应要求需要删除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. MATLAB复制图片时边框大的问题

    当使用MATLAB画图时,需要将图片复制到word中,会发现图片有一个白色的边框,在论文的排版中是一个影响美观的问题 例如: >> x = 0:10; >> y = sin(x ...

  2. 006 --MySQL索引原理

    一 .索引的概念? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化 ...

  3. Hyperledger Fabric chaincode 开发(疑难解答)

    Q&A Q1: 使用fabric release 1.2 进行golang chaincode开发时报错: ..\..\hyperledger\fabric\vendor\github.com ...

  4. 配置Ubuntu16.04虚拟机 (用途:CTF_pwn)

    因为学习需要16.xx的虚拟机,所以把之前18.04的Ubuntu卸掉重装了一遍Ubuntu16.04, 考虑到我有备份和重装系统的爱好,故记之,以备后用. 目录: //最后更新时间:190122·1 ...

  5. SQL ser 进行表中的插入操作时,变量字段名,导致报错时解决办法 :动态SQL

    标题不能描述的很清楚,下面具体说所我要描述的问题,和解决的办法. 作为SQL小白一枚,近日在写一段代码,代码如下: 报错显示 变量@vv附近错误. 后来经过了解,原来是因为,这样需要使用 动态SQL去 ...

  6. maven:新建的maven工程需要添加一下插件

    //下面的代码是改变maven的默认使用Java版本,本机是jdk1.7所以用1.7<plugins> <plugin> <groupId>org.apache.m ...

  7. PSP总结

    一.回顾1 (1)回想一下你曾经对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 以前的回答:当初之所以选择计算机专业,是因为我比较喜欢数学,觉得计 ...

  8. spring冲刺第三天

    昨天完成了环境配置和初步的地图设想. 今天从网上找了有关这方面的例子,运行试验了一番.编写的地图画面在程序上运行了一下,有些错误,还需要很多方面的改进. 这些例子有很多地方都不太懂,但还是看完了.我认 ...

  9. HDU 1170 Shopping Offers 离散+状态压缩+完全背包

    题目链接: http://poj.org/problem?id=1170 Shopping Offers Time Limit: 1000MSMemory Limit: 10000K 问题描述 In ...

  10. 重学 以太网的mac协议的CSMA/CD

    之前上课一直模糊的CSMA/CD进行系统性整理. CSMA/CD (Carrier Sense Multiple Acess/Collision Detect)应用在OSI的 数据链路层 在以太网中, ...