qt读写xml文件

来源:互联网 发布:linkdeque java 编辑:程序博客网 时间:2024/05/22 15:35

1、DOM方式

写xml文件,以QDomText方式写,代码如下

QFile file("d:/test.txt");file.open(QIODevice::WriteOnly);QDomDocument doc;QDomProcessingInstruction instruction;instruction = doc.createProcessingInstruction("xml", "version = \'1.0\'");doc.appendChild(instruction);QDomElement root = doc.createElement("html");doc.appendChild(root);QDomElement data;QDomElement tmp;QDomText text;data = doc.createElement("title");text = doc.createTextNode(QStringLiteral("多看"));data.appendChild(text);root.appendChild(data);tmp = doc.createElement("book");text = doc.createTextNode(QStringLiteral("小说"));tmp.appendChild(text);root.appendChild(tmp);QTextStream out(&file);doc.save(out, 4);file.close();

读代码为

QFile file("d:/test.txt");file.open(QIODevice::ReadOnly);QDomDocument doc;doc.setContent(&file);QDomElement root = doc.documentElement();for (QDomNode node = root.firstChild(); !node.isNull(); node = node.nextSibling()) {QDomElement element = node.toElement();QString tagName = element.tagName();if (tagName == "title") {qDebug() << element.text();} else if (tagName == "book") {qDebug() << element.text();}}file.close();


以QDomAttr方式写:

QFile file("d:/test.txt");file.open(QIODevice::WriteOnly);QDomDocument doc;QDomProcessingInstruction instruction;instruction = doc.createProcessingInstruction("xml", "version = \'1.0\'");doc.appendChild(instruction);QDomElement root = doc.createElement("html");doc.appendChild(root);QDomAttr data;QDomAttr tmp;data = doc.createAttribute("title");data.setValue(QStringLiteral("多看"));root.setAttributeNode(data);tmp = doc.createAttribute("book");tmp.setValue(QStringLiteral("小说"));root.setAttributeNode(tmp);QTextStream out(&file);doc.save(out, 4);file.close();

读QDomAttr

QFile file("d:/test.txt");file.open(QIODevice::ReadOnly);QDomDocument doc;doc.setContent(&file);QDomElement root = doc.documentElement();qDebug() << root.attribute("title");qDebug() << root.attribute("book");file.close();

2、用QXmlStreamReader和QXmlStreamWriter

写文件,设置相关联的文件,用writeStartDocument来开始,用writeEndDocument来结束

用writeStartElement和writeEndElement来表示元素的开始和结束,需要成对使用

<name>a</name>形式,用writeTextElement

<name a=""/>形式,用writeAttribute

QFile file("test.txt"); file.open(QIODevice::writeOnly);QXmlStreamWriter xmlstreamwriter(&file);xmlstreamwriter.setAutoFormatting(true);xmlstreamwriter.writeStartDocument();xmlstreamwriter.writeStartElement("xml");xmlstreamwriter.writeStartElement("round");xmlstreamwriter.writeAttribute("id", mRoundId);xmlstreamwriter.writeAttribute("tableid", mTableId);//player1xmlstreamwriter.writeStartElement("player1");xmlstreamwriter.writeAttribute("framescore", mPlayer1Frame);xmlstreamwriter.writeAttribute("points", mPlayer1Point);xmlstreamwriter.writeAttribute("break", mPlayer1ContinuePoint);  xmlstreamwriter.writeCharacters("Hello World");   //添加内容xmlstreamwriter.writeEndElement();//player2xmlstreamwriter.writeStartElement("player2");xmlstreamwriter.writeAttribute("framescore", mPlayer2Frame);xmlstreamwriter.writeAttribute("points", mPlayer2Point);xmlstreamwriter.writeAttribute("break", mPlayer2ContinuePoint);xmlstreamwriter.writeEndElement();xmlstreamwriter.writeEndElement();xmlstreamwriter.writeEndElement();xmlstreamwriter.writeEndDocument(); file.close();
结果如下:

<?xml version="1.0" encoding="UTF-8"?><xml>    <round id="" tableid="1">        <player1 framescore="" points="" break="">Hello World</player1>        <player2 framescore="" points="" break=""/>    </round></xml>

读文件时,用isStartElement来判断标志的起始

<name a=""></name>形式,用attributes().value("a")

<name>a</name>形式,用readElementText

在读取时,是通过循环,while (!reader.atEnd()) {reader.readNext();.....;}

QFile file("test.txt");file.open(QIODevice::ReadOnly);QXmlStreamReader reader(&file);while (!reader.atEnd()) {reader.readNext();if (reader.isStartElement()) {if (reader.name() == "round") {qDebug() << reader.attributes().value("id").toString();qDebug() << reader.attributes().value("tableid").toString();} else if (reader.name() == "player1") {qDebug() << reader.attributes().value("framescore").toString();qDebug() << reader.attributes().value("points").toString();qDebug() << reader.attributes().value("break").toString();qDebug() << reader.readElementText();} else if (reader.name() == "player2") {qDebug() << reader.attributes().value("framescore").toString();qDebug() << reader.attributes().value("points").toString();qDebug() << reader.attributes().value("break").toString();qDebug() << reader.readElementText();}}}file.close();
结果如下

"" "1" "" "" "" "Hello World" "" "" "" "" 







0 0
原创粉丝点击