Qt 读写 XML 文件
#include <QXmlStreamWriter> //头文件
(1)写入 XML :
QString filePath = "xxx";
QFile file(filePath);
if(!file.open(QIODevice::WriteOnly || QIODevice::Text || QIODevice::Truncate)){ // QIODevice::Truncate 代表打开文件时清空文件内容
qDebug() << "open xml file failed";
return;
}
QXmlStreamWriter writer(&file);
writer.setAutoFormatting(true); //设置自动格式化
writer.writeStartDocument("1.0"); //文档开始
writer.writeStartElement("batch"); //节点
writer.writeAttribute("batchType", "xxx");
writer.writeStartElement("entity"); //子节点
//开始填写内容
writer.writeTextElement("StationID", "54511"); //元素
...
writer.writeEndElement(); //子节点结尾
writer.writeEndElement(); //节点结尾
writer.writeEndDocument(); //文档结尾
file.close();
以上代码最终会生成的 XML 内容如下:
<batch batchType="status">
<entity>
<StationID>54511</StationID>
...
</entity>
</batch>
(2)读取 XML :
QString filePath = "xxx";
QFile file(filePath);
if(!file.open(QIODevice::ReadOnly || QIODevice::Text || QIODevice::Truncate)){
qDebug() << "open xml file failed";
return;
}
QXmlStreamReader reader(&file);
while(!reader.atEnd() && !reader.hasError()){
QXmlStreamReader::TokenType token = reader.readNext(); //获取一行的解析令牌
if (token == QXmlStreamReader::StartDocument){
continue;
}
if (token == QXmlStreamReader::StartElement)
{
if (reader.name() == "xxx") //xxx属性节点
{
QString attributeValue = reader.attributes().value("attribute").toString();
qDebug() << "Attribute value: " << attributeValue;
}
else if (reader.name() == "xxx") //xxx文本值
{
QString textValue = reader.readElementText();
qDebug() << "Text value: " << textValue;
}
}
}
file.close();