#include "qxmlwrapper.h"
QXmlWrapper::QXmlWrapper()
{
}
bool QXmlWrapper::CreateXmlFile(const QString &_fileName,
const QString &_rootName,
const QString &_version,
const QString &_encoding,
const QString &_standalone)
{
QFile file(_fileName);
// 只写方式打开,并清空以前的信息
if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
return false;
QDomDocument doc;
QDomProcessingInstruction instruction; //添加处理指令(声明)
QString data;
data = "version=\"" + _version + "\" encoding=\"" + _encoding + "\" standalone=\"" + _standalone + "\"";
instruction = doc.createProcessingInstruction("xml", data);
doc.appendChild(instruction);
QDomElement root = doc.createElement(_rootName);
doc.appendChild(root); //添加根元素
QTextStream out(&file);
doc.save(out,4); // 将文档保存到文件,4为子元素缩进字符数
file.close();
return true;
}
bool QXmlWrapper::DeleteXmlFile(const QString &_fileName)
{
if (_fileName.isEmpty())
{
return false;
}
QFile file(_fileName);
if(!file.setPermissions(QFile::WriteOwner)) // 修改文件属性
return false;
if(!QFile::remove(_fileName)) // 删除文件
return false;
return true;
}
bool QXmlWrapper::RenameXmlFile(const QString &_fileName,
const QString &_newName)
{
return QFile::rename(_fileName, _newName);
}
bool QXmlWrapper::GetNodeByName(QDomElement &_rootEle,
const QString &_nodeName,
QDomElement &_node)
{
if(_nodeName == _rootEle.tagName()) // 若为根节点,则返回
{
_node = _rootEle;
return true;
}
QDomElement ele = _rootEle; //返回根元素
for (ele = _rootEle.firstChildElement(); ele.isElement(); ele = ele.nextSiblingElement())
{
//递归处理子节点,获取节点
if(GetNodeByName(ele, _nodeName, _node))
return true;
}
return false;
}
bool QXmlWrapper::AddNode_Text(const QString &_fileName,
const QString &_parentNodeName,
const QString &_nodeName,
const QString &_nodeText)
{
if (_fileName.isEmpty()) // 文件名为空
{
return false;
}
// 新建QDomDocument类对象,它代表一个XML文档
QDomDocument doc;
// 建立指向“_fileName”文件的QFile对象
QFile file(_fileName);
// 以只读方式打开
if (!file.open(QIODevice::ReadOnly))
return false;
// 将文件内容读到doc中
if (!doc.setContent(&file))
{
file.close();
return false;
}
// 关闭文件
file.close();
QDomElement rootEle = doc.documentElement(); //返回根元素
QDomElement parentNode;
GetNodeByName(rootEle, _parentNodeName, parentNode);
// 添加元素及其文本
QDomElement childEle = doc.createElement(_nodeName);
QDomText text;
text = doc.createTextNode(_nodeText);
childEle.appendChild(text);
parentNode.appendChild(childEle);
if(!file.open(QFile::WriteOnly|QFile::Truncate)) //先读进来,再重写,如果不用truncate就是在后面追加内容,就无效了
return false;
//输出到文件
QTextStream out(&file);
doc.save(out,4); // 将文档保存到文件,4为子元素缩进字符数
file.close();
return true;
}
bool QXmlWrapper::AddNode_All(const QString &_fileName,
const QString &_parentNodeName,
const QString &_nodeName,
const QString &_nodeText,
QSTRING_MAP &_attMap)
{
if (_fileName.isEmpty()) // 文件名为空
{
return false;
}
// 新建QDomDocument类对象,它代表一个XML文档
QDomDocument doc;
// 建立指向“fileName”文件的QFile对象
QFile file(_fileName);
// 以只读方式打开
if (!file.open(QIODevice::ReadOnly))
return false;
// 将文件内容读到doc中
if (!doc.setContent(&file))
{
file.close();
return false;
}
// 关闭文件
file.close();
QDomElement rootEle = doc.documentElement(); //返回根元素
QDomElement parentNode;
GetNodeByName(rootEle, _parentNodeName, parentNode);
// 添加元素及其文本
QDomElement childEle = doc.createElement(_nodeName);
QDomText text;
text = doc.createTextNode(_nodeText);
childEle.appendChild(text); // 添加文本
// 添加属性
QSTRING_MAP_ITER it; //遍历map
for ( it = _attMap.begin(); it != _attMap.end(); ++it )
{
QDomAttr att = doc.createAttribute(it.key()); // 属性名
att.setValue(it.value()); // 属性值
childEle.setAttributeNode(att);
}
parentNode.appendChild(childEle);
if(!file.open(QFile::WriteOnly|QFile::Truncate)) //先读进来,再重写,如果不用truncate就是在后面追加内容,就无效了
return false;
//输出到文件
QTextStream out(&file);
doc.save(out,4); // 将文档保存到文件,4为子元素缩进字符数
file.close();
return true;
}
bool QXmlWrapper::DeleteNode(const QString &_fileName,
const QString &_nodeName)
{
//打开文件
QFile file(_fileName); //相对路径、绝对路径、资源路径都可以
if(!file.open(QFile::ReadOnly))
return false;
//删除一个一级子节点及其元素,外层节点删除内层节点于此相同
QDomDocument doc;
if(!doc.setContent(&file))
{
file.close();
return false;
}
file.close(); //一定要记得关掉啊,不然无法完成操作
QDomElement rootEle = doc.documentElement(); //返回根元素
QDomElement nodeEle;
GetNodeByName(rootEle, _nodeName, nodeEle);
// 假如是根节点
if (rootEle == nodeEle)
//doc.removeChild(rootEle);
return false;
// 假如是其它节点
if (nodeEle.isElement())
{
QDomNode parentEle = nodeEle.parentNode();
if (parentEle.isElement())
parentEle.removeChild(nodeEle);
else
return false;
}
if(!file.open(QFile::WriteOnly|QFile::Truncate))
return false;
//输出到文件
QTextStream out_stream(&file);
doc.save(out_stream,4); //缩进4格
file.close();
return true;
}
bool QXmlWrapper::ModifyNode_Text(const QString &_fileName,
const QString &_nodeName,
const QString &_nodeText)
{
if (_fileName.isEmpty()) // 文件名为空
{
return false;
}
//打开文件
QFile file(_fileName); //相对路径、绝对路径、资源路径都可以
if(!file.open(QFile::ReadOnly))
return false;
//删除一个一级子节点及其元素,外层节点删除内层节点于此相同
QDomDocument doc;
if(!doc.setContent(&file))
{
file.close();
return false;
}
file.close(); //一定要记得关掉啊,不然无法完成操作
QDomElement rootEle = doc.documentElement(); //返回根元素
QDomElement nodeEle;
GetNodeByName(rootEle, _nodeName, nodeEle);
if(nodeEle.isElement())
{
QDomNode oldnode = nodeEle.firstChild(); //标签之间的内容作为节点的子节点出现,得到原来的子节点
nodeEle.firstChild().setNodeValue(
没有合适的资源?快使用搜索试试~ 我知道了~
QXmlWrapper,实现XML文件的创建、删除以及元素节点的增加、删除、修改与查找等。
共2个文件
cpp:1个
h:1个
1星 需积分: 49 81 下载量 55 浏览量
2017-12-15
10:20:20
上传
评论 2
收藏 4KB ZIP 举报
温馨提示
自己编写Qt的XML封装类QXmlWrapper,实现XML文件的创建、删除以及元素节点的增加、删除、修改与查找等。
资源推荐
资源详情
资源评论
收起资源包目录
QXmlWrapper.zip (2个子文件)
QXmlWrapper
qxmlwrapper.cpp 14KB
qxmlwrapper.h 6KB
共 2 条
- 1
资源评论
- SandyIT2020-06-23QDomDocument
竹林浪子
- 粉丝: 1
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功