本文共 4646 字,大约阅读时间需要 15 分钟。
http://blog.csdn.net/xiexingshishu/article/details/45177023
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);
-
- xmlstreamwriter.writeStartElement("player1");
- xmlstreamwriter.writeAttribute("framescore", mPlayer1Frame);
- xmlstreamwriter.writeAttribute("points", mPlayer1Point);
- xmlstreamwriter.writeAttribute("break", mPlayer1ContinuePoint);
- xmlstreamwriter.writeCharacters("Hello World");
- xmlstreamwriter.writeEndElement();
-
- xmlstreamwriter.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"
- ""
- ""
- ""
- ""