生活随笔
收集整理的這篇文章主要介紹了
Qt中DOM的读写
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?對于一般的XML數據處理,Qt提供了QtXml模塊。QXml模塊提供了三種截然不同的應用程序編程接口用于讀取XML文檔:
? ?????QXmlStreamReader 是一個用于讀取格式良好的XML文檔的快速解析器。
? ? ????DOM(文檔對象模型)把XML文檔轉換為應用程序可以遍歷的樹形結構。
? ? ????SAX(XML簡單應用程序編程接口)通過虛擬函數直接向應用程序報告“解析事件”。
? ? 對于XML文件的寫入,Qt也提供了三種可用的方法:
????? ? 使用QXmlStreamWriter。
?
在內存中以DOM樹的結構表示數據,并要求這個數型結構將自己寫到文件中。
????? ? 手動生成XML。
在這里我使用了DOM來對XML文件進行操作,代碼如下:
生成的樹形結構如下:
<?xml?version?="1.0"?encoding="UTF-8"?>?<ContactMan>?????<Info>?????????<name>zhang?san</name>?????????<phone>110119120</phone>?????</Info>?</ContactMan>????bool?RWXml::readFile(const?QString?&fileName)?{?????QFile?file(fileName);?????if(!file.open(QFile::ReadOnly?|?QFile::Text))?????{?????????std::cerr?<<?"Error:?Cannot?read?file"?<<std::endl;?????????return?false;?????}?????QString?errorStr;?????int?errorLine;?????int?errorColumn;?????QDomDocument?doc;??????if(!doc.setContent(&file,true,&errorStr,&errorLine,&errorColumn))?????{?????????std::cerr?<<?"Error:?Prase?error?at?line?"?<<?std::endl;?????????file.close();?????????return?false;?????}?????QDomElement?root?=?doc.documentElement();?????QDomNode?n?=?root.firstChild();?????while(!n.isNull())?????{?????????QDomElement?e=?n.toElement();?????????if(!e.isNull())?????????{?????????????qDebug()?<<?e.tagName()?<<?":"?<<?e.text();?????????}?????????n?=?n.nextSibling();?????}??????file.close();;?????return?true;?}?bool?RWXml::writeFile(const?QString?&fileName)?{?????QFile?file(fileName);?????if(!file.open(QFile::Text?|?QFile::WriteOnly))?????{?????????std::cerr?<<?"Error:?Cannot?write?file"?<<?qPrintable(fileName)?<<?std::endl;??????????file.close();??????????return?false;?????}?????QDomDocument?doc;?????QDomProcessingInstruction?instruction;?????instruction?=?doc.createProcessingInstruction("xml"?,?"version?=\"1.0\"?encoding=\"UTF-8\"");?????doc.appendChild(instruction);?????QDomElement?root?=?doc.createElement("ContactMan");?????doc.appendChild(root);??????QDomElement?info_Node?=?doc.createElement("Info");???????????????????QDomElement?name_Node?=?doc.createElement("name");?????QDomElement?phone_Node?=?doc.createElement("phone");??????QDomText?text;?????text?=?doc.createTextNode("zhang?san");?????name_Node.appendChild(text);?????text?=?doc.createTextNode("110119120");?????phone_Node.appendChild(text);??????info_Node.appendChild(name_Node);?????info_Node.appendChild(phone_Node);??????root.appendChild(info_Node);??????QTextStream?out(&file);?????doc.save(out?,?4);?????file.close();?????return?true;?}? ?
轉載于:https://blog.51cto.com/mjrao/1007951
總結
以上是生活随笔為你收集整理的Qt中DOM的读写的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。