Qt的xml解析主要运用QXmlStreamReader和QXmlStreamWriter,下面结合本人业务逻辑给出示例,适合新手大神绕道:
1.xml的构建以及压缩
本人需要压缩xml文件,所以一起展示。outFile为要压缩文件
void DataIoPanel::xmlFileCompress(QuaZipFile &outFile) {
//最终xml文件写到QByteArray里面
QByteArray ba;
QXmlStreamWriter writer(&ba);
writer.setCodec("UTF-8");
writer.writeStartDocument();//编写通用第一行<!--xml-->
writer.writeStartElement("FacelogInfo");
//查询facelog构建xml
QString facelogsql = "SELECT * FROM facelog";
QSqlQuery faceQuery(db);
faceQuery.exec(facelogsql);
while (faceQuery.next())
{
//构建一个facelog节点
writer.writeStartElement("facelog");
writer.writeTextElement("sfz",faceQuery.value("sfz").toString());
writer.writeTextElement("xingming",faceQuery.value("xingming").toString());
writer.writeTextElement("xingbie",faceQuery.value("xingbie").toString());
writer.writeTextElement("shibieleixing",faceQuery.value("shibieleixing").toString());
writer.writeTextElement("shibieleixingint",faceQuery.value("shibieleixingint").toString());
writer.writeTextElement("shijian",faceQuery.value("shijian").toString());
writer.writeTextElement("renlianphoto",faceQuery.value("renlianphoto").toString());
writer.writeTextElement("remarks", faceQuery.value("remarks").toString());
writer.writeTextElement("denglumana", faceQuery.value("denglumana").toString());
writer.writeTextElement("zkzPhoto", faceQuery.value("zkzPhoto").toString());
writer.writeTextElement("kd", faceQuery.value("kd").toString());
writer.writeTextElement("changci", faceQuery.value("changci").toString());
writer.writeTextElement("renzcount", faceQuery.value("renzcount").toString());
writer.writeTextElement("sfzphoto", faceQuery.value("sfzphoto").toString());
//结束一个facelog节点。
writer.writeEndElement();
}
//结束FacelogInfo节点
writer.writeEndElement();
//压缩xml
outFile.open(QIODevice::WriteOnly,QuaZipNewInfo("1.xml"));
outFile.write(ba);
outFile.close();
}
2.xml解析
xml文件先读取为QByteArray
void DataIoPanel::analyzeXmlAndInputTofacelog(const QByteArray&ba) {
QString faceLogSql = "INSERT INTO facelog(sfz,xingming,xingbie,shibieleixing,shibieleixingint,shijian,renlianphoto,remarks,denglumana,zkzPhoto,kd,changci,renzcount,sfzphoto) "
" VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
QSqlQuery faceQuery(db);
db.transaction();
faceQuery.prepare(faceLogSql);
QXmlStreamReader xmlReader(ba);
while (!xmlReader.atEnd()) {
xmlReader.readNextStartElement();
if (xmlReader.isStartElement()) {
QString strEleName = xmlReader.name().toString();
if (strEleName == "facelog") {
for (int i = 0; i < 14;i++) {
xmlReader.readNextStartElement();
faceQuery.bindValue(i,xmlReader.readElementText().trimmed());
}
faceQuery.exec();
}
}
}
db.commit();
}
以上是Qt的xml解析的简单运用,希望对初学者有些许帮助