加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

qt读写xml文件

发布时间:2020-12-16 00:15:45 所属栏目:百科 来源:网络整理
导读: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();


以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);
//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" 
"" 
"" 
"" 
"" 

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读