目录名字
使用Qt创建XML文档及XML文档的增删改
XML文档的操作 :QXml + QFile+QTextStream
创建XML的一般步骤:
1、添加处理指令及XML说明
2、添加元素
3、写入文件
示例:
QDomDocument doc;
// 添加处理指令即XML说明
QDomProcessingInstruction instruction;
instruction = doc.createProcessingInstruction("xml",
"version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild(instruction);
// 添加根元素
QDomElement root = doc.createElement(QString("书库"));
doc.appendChild(root);
// 添加第一个图书元素及其子元素
QDomElement book = doc.createElement(QString("图书"));
QDomAttr id = doc.createAttribute(QString("编号"));
QDomElement title = doc.createElement(QString("书名"));
QDomElement author = doc.createElement(QString("作者"));
QDomText text;
id.setValue(QString("1"));
book.setAttributeNode(id);
text = doc.createTextNode(QString("Qt"));
title.appendChild(text);
text = doc.createTextNode(QString("shiming"));
author.appendChild(text);
book.appendChild(title);
book.appendChild(author);
root.appendChild(book);
// 添加第二个图书元素及其子元素
book = doc.createElement(QString("图书"));
id = doc.createAttribute(QString("编号"));
title = doc.createElement(QString("书名"));
author = doc.createElement(QString("作者"));
id.setValue(QString("2"));
book.setAttributeNode(id);
text = doc.createTextNode(QString("Linux"));
title.appendChild(text);
text = doc.createTextNode(QString("yafei"));
author.appendChild(text);
book.appendChild(title);
book.appendChild(author);
root.appendChild(book);
QFile file("my.xml");
if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) return ;
QTextStream out(&file);
// 将文档保存到文件,4为子元素缩进字符数
doc.save(out, 4);
file.close();
细节:
- 1、QDOMDocument类在内存中生成一颗DOM树。
- 2、createElement()添加元素 createAttribute()添加属性 createTextNode()添加文本
通过这些个函数来生成各种节点 - 3、使用appendChild()将各个节点依次追加
XML 文档的操作(添加、查找、更新、删除)
添加的一般步骤
1、打开文件
2、QDomDocument 类来创建DOM树
3、关闭文件
4、找到最后一个孩子节点的元素
5、新增元素,在最后一个孩子节点后追加一个新元素
示例代码:
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(QString("图书"));
QDomAttr id = doc.createAttribute(QString("编号"));
QDomElement title = doc.createElement(QString("书名"));
QDomElement author = doc.createElement(QString("作者"));
QDomText text;
// 我们获得了最后一个孩子结点的编号,然后加1,便是新的编号
QString num = root.lastChild().toElement().attribute(QString("编号"));
int count = num.toInt() +1;
id.setValue(QString::number(count));
book.setAttributeNode(id);
text = doc.createTextNode(ui->lineEdit_2->text());
title.appendChild(text);
text = doc.createTextNode(ui->lineEdit_3->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();
查找、更新、删除的一般操作
1、elementByTagName()来获取所有图书元素的列表
2、使用指定的id编号来获取要操作的图书元素
3、删除:removeChild()函数来删除该元素并保存到文件。
4、更新:setNodeValue()来为其设置新的值并保存到文件
3、查找:将该元素的内容显示出来。
// 先清空显示
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();
QDomNode n = docElem.firstChild();
while(!n.isNull())
{
if (n.isElement())
{
QDomElement e = n.toElement();
ui->listWidget->addItem(e.tagName() + e.attribute(QString("编号")));
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());
}
}
n = n.nextSibling();
}
界面效果:
总结:
1、本篇的参考来源《Qt Creator 快速入门》
2、XML的操作,理解上并不复杂,操作上基本上按照流程来执行,但熟练掌握还需要勤加练习才好