qt读写xml文件
2018-03-02 09:56
483 查看
http://blog.csdn.net/xiexingshishu/article/details/45177023
1、DOM方式写xml文件,以QDomText方式写,代码如下
[cpp] view plain copyQFile 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();
读代码为[cpp] view plain copyQFile 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方式写:[cpp] view plain copyQFile 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[cpp] view plain copyQFile 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[cpp] view plain copyQFile 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);
//player1
xmlstreamwriter.writeStartElement("player1");
xmlstreamwriter.writeAttribute("framescore", mPlayer1Frame);
xmlstreamwriter.writeAttribute("points", mPlayer1Point);
xmlstreamwriter.writeAttribute("break", mPlayer1ContinuePoint);
xmlstreamwriter.writeCharacters("Hello World"); //添加内容
xmlstreamwriter.writeEndElement();
//player2
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();
结果如下:[cpp] view plain copy<?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();.....;}[cpp] view plain copyQFile 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();
结果如下[html] view plain copy""
"1"
""
""
""
"Hello World"
""
""
""
""
1、DOM方式写xml文件,以QDomText方式写,代码如下
[cpp] view plain copyQFile 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();
读代码为[cpp] view plain copyQFile 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方式写:[cpp] view plain copyQFile 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[cpp] view plain copyQFile 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[cpp] view plain copyQFile 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);
//player1
xmlstreamwriter.writeStartElement("player1");
xmlstreamwriter.writeAttribute("framescore", mPlayer1Frame);
xmlstreamwriter.writeAttribute("points", mPlayer1Point);
xmlstreamwriter.writeAttribute("break", mPlayer1ContinuePoint);
xmlstreamwriter.writeCharacters("Hello World"); //添加内容
xmlstreamwriter.writeEndElement();
//player2
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();
结果如下:[cpp] view plain copy<?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();.....;}[cpp] view plain copyQFile 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();
结果如下[html] view plain copy""
"1"
""
""
""
"Hello World"
""
""
""
""
相关文章推荐
- QT DOM的方式读写Xml文件
- qt读写xml文件
- Qt读写XML文件
- Qt Write and Read XML File 读写XML文件
- Qt:用Dom方式读写xml文件
- Qt 读写XML文件
- QT读写XML文件之DOM方式解析XML
- C#.net读写XML文件
- 用Qt进行文件的读写操作
- JSP 自己写的在JSP页面得到文件的服务器路径,并对XML文件进行读写(以对Tomcat的conf目录中的context.xml文件为例)
- 发现一个小型XML文件读写程序——TinyXML
- dom4j读写XML文件
- 【C/C++学院】(18)QT文件读写/主窗口类/获取host信息
- Qt: QXMLStreamReader,读XML文件实例
- C#读写xml文件
- XML 处理 ,包括文件读写, in silverlight (silverlight系列(XML操作、HTTP通信、WebRequest通信))
- 分享一个java对xml,excel,jdbc.properties,读写文件,读写图片等实现(3)
- java学习:使用dom4j读写xml文件
- [Windows通用应用开发] 读写XML文件
- QT中使用QXmlStreamReader解析XML文件