日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Qt中DOM的读写

發(fā)布時(shí)間:2025/3/21 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt中DOM的读写 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?對(duì)于一般的XML數(shù)據(jù)處理,Qt提供了QtXml模塊。QXml模塊提供了三種截然不同的應(yīng)用程序編程接口用于讀取XML文檔:

? ?????QXmlStreamReader 是一個(gè)用于讀取格式良好的XML文檔的快速解析器。

? ? ????DOM(文檔對(duì)象模型)把XML文檔轉(zhuǎn)換為應(yīng)用程序可以遍歷的樹形結(jié)構(gòu)。

? ? ????SAX(XML簡(jiǎn)單應(yīng)用程序編程接口)通過(guò)虛擬函數(shù)直接向應(yīng)用程序報(bào)告“解析事件”。

? ? 對(duì)于XML文件的寫入,Qt也提供了三種可用的方法:

????? ? 使用QXmlStreamWriter。

?

在內(nèi)存中以DOM樹的結(jié)構(gòu)表示數(shù)據(jù),并要求這個(gè)數(shù)型結(jié)構(gòu)將自己寫到文件中。

????? ? 手動(dòng)生成XML。

在這里我使用了DOM來(lái)對(duì)XML文件進(jìn)行操作,代碼如下:

生成的樹形結(jié)構(gòu)如下:

  • <?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");?
  • ???/*?QDomAttr?nameAttr?=?doc.createAttribute("name");?
  • ????nameAttr.setValue("zhang?san");?
  • ????QDomAttr?phoneAttr?=?doc.createAttribute("phone");?
  • ????phoneAttr.setValue("110");?
  • ????info_Node.setAttributeNode(nameAttr);?
  • ????info_Node.setAttributeNode(phoneAttr);?
  • ?
  • ????root.appendChild(info_Node);?
  • ????*/?
  • //********one?
  • ?
  • ????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;?
  • }?
  • ?

    轉(zhuǎn)載于:https://blog.51cto.com/mjrao/1007951

    總結(jié)

    以上是生活随笔為你收集整理的Qt中DOM的读写的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。