qt读写xml文件
发布时间:2020-12-16 05:46:26 所属栏目:百科 来源:网络整理
导读: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.a
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();
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); //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();结果如下: <?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" "" "" "" "" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |