本文最后更新于:2022年5月29日 上午
今天使用QT创建和读取XML文件,但是在使用过程中一直卡在if(!doc.setContent(&file))
这句上,一直想不出哪里出问题。最终查找资料发现是下面这句代码出了问题
1
| instruction=doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
|
虽然这句话是按规定格式来写的,但是可能由于QT本身的问题一直没能正确的定义好xml文件的版本,因此在将xml文件递给doc解析时一直出错。最后是使用了QXmlStreamWriter
来创建XML文件。下面直接看代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| QFile file("my.xml");
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) return;
QXmlStreamWriter writer(&file);
writer.setAutoFormatting(true); writer.writeStartDocument(); writer.writeEndDocument(); file.close();
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) return;
QDomDocument doc; QDomElement root = doc.createElement("书库");
doc.appendChild(root);
QDomElement book = doc.createElement("图书"); QDomAttr id = doc.createAttribute("编号"); QDomElement title = doc.createElement("书名"); QDomElement author = doc.createElement("作者"); QDomText text;
id.setValue("1"); book.setAttributeNode(id); text = doc.createTextNode("Qt"); title.appendChild(text); text = doc.createTextNode("Qtcreater"); author.appendChild(text); book.appendChild(title); book.appendChild(author); root.appendChild(book);
book = doc.createElement("图书"); id = doc.createAttribute("编号"); title = doc.createElement("书名"); author = doc.createElement("作者"); id.setValue("2"); book.setAttributeNode(id); text = doc.createTextNode("Mybook"); title.appendChild(text); text = doc.createTextNode("LKevin"); author.appendChild(text); book.appendChild(title); book.appendChild(author); root.appendChild(book); QTextStream out(&file);
doc.save(out, 4); file.close();
|
这样,再读xml文件时就不会出错。
参考链接:
【1】if (!doc.setContent(&file))出错的解决方法