#include "xmldemo.h"
#include <Qfile>
#include <QDomDocument>
#include <QTextStream>
#include <QMessageBox>
#include <qDebug>
#if defined(_MSC_VER) && (_MSC_VER >= 1600)
# pragma execution_character_set("utf-8")
#endif
xmlDemo::xmlDemo(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
QFile file("my.xml");
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
return;
QDomDocument doc; //dom树
QDomProcessingInstruction instruction;
instruction = doc.createProcessingInstruction("xml","version=\"1.0\"encoding=\"utf-8\"");
doc.appendChild(instruction);
QDomElement root = doc.createElement(tr("library"));
doc.appendChild(root); //添加根元素
//添加第一个book元素及其子元素
QDomElement book = doc.createElement(tr("book"));
QDomAttr id = doc.createAttribute(tr("id"));
id.setValue(tr("1"));
book.setAttributeNode(id);
QDomElement title = doc.createElement(tr("title"));
QDomText text;
text = doc.createTextNode(tr("Qt"));
title.appendChild(text);
QDomElement author = doc.createElement(tr("author"));
text = doc.createTextNode(tr("石明"));
author.appendChild(text);
book.appendChild(title);
book.appendChild(author);
root.appendChild(book);
// 添加第二个book元素及其子元素
book = doc.createElement(tr("book"));
id = doc.createAttribute(tr("id"));
id.setValue(tr("2"));
book.setAttributeNode(id);
title = doc.createElement(tr("title"));
text = doc.createTextNode(tr("Linux"));
title.appendChild(text);
author = doc.createElement(tr("author"));
text = doc.createTextNode(tr("亚飞"));
author.appendChild(text);
book.appendChild(title);
book.appendChild(author);
root.appendChild(book);
QTextStream out(&file);
doc.save(out, 4, QDomNode::EncodingFromTextStream); // 将文档保存到文件,4为子元素缩进字符数
file.close();
}
xmlDemo::~xmlDemo()
{
}
void xmlDemo::on_pBtnShowAll_clicked()
{
ui.listWidget->clear();
ui.listWidget->clear();
QFile file("my.xml");
if (!file.open(QIODevice::ReadOnly))
return;
QDomDocument doc;
if (!doc.setContent(&file))
{
file.close();
return;
}
file.close();
//返回根节点及其子节点的元素标记名
QDomElement docElem = doc.documentElement(); //返回根元素
//qDebug() << docElem.tagName(); //library
QDomNode n = docElem.firstChild(); //返回根节点的第一个子节点
while (!n.isNull()) //如果节点不为空
{
if (n.isElement()) //如果节点是元素
{
QDomElement e = n.toElement(); //转换为元素
ui.listWidget->addItem(e.tagName());
QDomNodeList list = e.childNodes();
for (int i = 0; i < list.count(); i++)
{
QDomNode node = list.at(i);
qDebug() << node.toElement().tagName() + ":" + node.toElement().text();
if (node.isElement())
ui.listWidget->addItem(" " + node.toElement().tagName() + ":" + node.toElement().text());
}
}
n = n.nextSibling(); //下一个兄弟节点
}
}
//添加节点
void xmlDemo::on_pBtnAdd_clicked()
{
ui.listWidget->clear();
QString addTitle = ui.lEditBook->text();
QString addAuthor = ui.lEditAuthor->text();
if (addTitle == "" || addAuthor == "")
{
QMessageBox::information(NULL, "提示", "书名和作者不能为空");
return;
}
QFile file("my.xml");
if (!file.open(QIODevice::ReadOnly))
return;
QDomDocument doc;
if (!doc.setContent(&file))
{
file.close();
return;
}
file.close();
QDomElement root = doc.documentElement();
QDomElement book = doc.createElement("book");
QDomAttr id = doc.createAttribute("id");
QDomElement title = doc.createElement("title");
QDomElement author = doc.createElement("Author");
QDomText text;
//获得最后一个孩子节点的编号,然后+1,得到新编号
QString num = root.lastChild().toElement().attribute("id");
int count = num.toInt() + 1;
id.setValue(QString::number(count));
book.setAttributeNode(id);
text = doc.createTextNode(ui.lEditBook->text());
title.appendChild(text);
text = doc.createTextNode(ui.lEditAuthor->text());
author.appendChild(text);
book.appendChild(title);
book.appendChild(author);
root.appendChild(book);
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
return;
QTextStream out(&file);
doc.save(out,4);
file.close();
ui.listWidget->clear();
ui.listWidget->addItem("添加成功");
}
void xmlDemo::doXml(const QString operate)
{
ui.listWidget->clear();
QFile file("my.xml");
if (!file.open(QIODevice::ReadOnly))
return;
QDomDocument doc;
if (!doc.setContent(&file))
{
file.close();
return;
}
file.close();
QDomNodeList list = doc.elementsByTagName("book");
//以标签名进行查找
for (int i = 0; i < list.count(); i++)
{
QDomElement e = list.at(i).toElement();
if (e.attribute("id") == ui.lEditNum->text())
{
if (operate == "delete")
{
QDomElement root = doc.documentElement(); //取出根节点
root.removeChild(list.at(i)); //从根节点删除该节点
QFile file("my.xml");
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
return;
QTextStream out(&file);
doc.save(out, 4);
file.close();
ui.listWidget->addItem("删除成功");
}
else if (operate == "update")
{
QDomNodeList child = list.at(i).childNodes();
//找到它的所有子节点,就是书名和作者
child.at(0).toElement().firstChild().setNodeValue(ui.lEditBook->text());
child.at(1).toElement().firstChild().setNodeValue(ui.lEditAuthor->text());
QFile file("my.xml");
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate))
return;
QTextStream out(&file);
doc.save(out, 4);
file.close();
ui.listWidget->addItem("更新成功");
}
else if (operate == "find")
{
QDomNodeList list = e.childNodes();
for (int i = 0; i < list.count(); i++)
{
QDomNode node = list.at(i);
if (node.isElement())
ui.listWidget->addItem(" " + node.toElement().tagName()
+ ":" + node.toElement().text());
}
}
}
}
}
void xmlDemo::on_pBtnSearch_clicked()
{
doXml("find");
}
void xmlDemo::on_pBtnUpdate_clicked()
{
doXml("update");
}
void xmlDemo::on_pBtnDelete_clicked()
{
doXml("delete");
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
xmlDemo.rar (51个子文件)
xmlDemo
xmlDemo.v12.suo 53KB
x64
Release
xmlDemo.exe 71KB
Debug
xmlDemo.exe 229KB
xmlDemo.ilk 1.56MB
xmlDemo.pdb 2.6MB
xmlDemo.sln 1KB
xmlDemo
xmlDemo.vcxproj.user 631B
xmldemo.h 485B
xmldemo.qrc 67B
xmlDemo.vcxproj.filters 3KB
xmlDemo.vcxproj 19KB
my.xml 239B
Resources
x64
Release
moc_xmldemo.obj 207KB
xmldemo.obj 257KB
xmlDemo.tlog
CL.write.1.tlog 770B
xmlDemo.lastbuildstate 148B
CL.read.1.tlog 72KB
custombuild.read.1.tlog 394B
cl.command.1.tlog 6KB
link.write.1.tlog 472B
link.command.1.tlog 2KB
link.read.1.tlog 4KB
custombuild.write.1.tlog 558B
custombuild.command.1.tlog 2KB
xmlDemo.log 2KB
main.obj 205KB
qrc_xmldemo.obj 2KB
Debug
vc120.pdb 1.7MB
moc_xmldemo.obj 402KB
xmldemo.obj 653KB
xmlDemo.tlog
CL.write.1.tlog 2KB
xmlDemo.lastbuildstate 146B
CL.read.1.tlog 73KB
custombuild.read.1.tlog 394B
cl.command.1.tlog 5KB
link.write.1.tlog 604B
link.command.1.tlog 2KB
link.read.1.tlog 3KB
custombuild.write.1.tlog 554B
custombuild.command.1.tlog 2KB
xmlDemo.log 2KB
main.obj 397KB
qrc_xmldemo.obj 6KB
main.cpp 263B
GeneratedFiles
Release
moc_xmldemo.cpp 4KB
qrc_xmldemo.cpp 1KB
ui_xmldemo.h 7KB
Debug
moc_xmldemo.cpp 4KB
xmldemo.cpp 6KB
xmldemo.ui 4KB
xmlDemo.sdf 24.44MB
共 51 条
- 1
不相信眼泪
- 粉丝: 51
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Figma Converter for Unity适用Unity的Figma转换器Unity游戏开发插件unitypackage
- Creepy Animatronic Anims 令人毛骨悚然的电子动画Unity游戏动画插件资源unitypackage
- Rankings & Leaderboards 排名和排行榜Unity游戏开发插件资源unitypackage
- Semantic Color Palette 语义调色板Unity游戏开发插件资源unitypackage
- Low Poly Nature:Lush and Diverse Environments低聚自然郁郁Unity低多边形模型资源
- voc数据集是什么-我们如何使用voc数据集
- Edgar Pro-Procedural Level Generator程序关卡生成器Unity开发插件unitypackage
- 宝藏软件m3u8下载器\m3u8DL-CLI
- 三次样条插值的介绍-什么是三次样条插值原理
- http的一些相关介绍-对于我们来说什么是http
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0