Qt-QML-C++互動實現檔案IO系統-後繼-讀取XML檔案和建立XML檔案
阿新 • • 發佈:2019-02-07
在前面兩篇中,大致完成了一個檔案IO的讀和寫操作。前面兩篇文章連結
今天這個是,今天主要是寫了怎麼把配置檔案寫入到XML中
上今天的詳程式碼
一個讀檔案,一個寫檔案QJsonObject DLFileIOSystem::DLReadXML() { qDebug()<<"XML 讀取函式執行"; QFile file("./config.xml"); //開啟XMl檔案 if(!file.open(QFile::ReadOnly | QFile::Text)) { QMessageBox::information(NULL,"Title","Open File False"); //如果開啟失敗則提示 } QDomDocument doc; //把檔案內容寫入到doc中 doc.setContent(&file); file.close(); //關閉檔案 QDomElement root = doc.documentElement(); QDomNode node = root.firstChild(); while (!node.isNull()) { QDomElement element = node.toElement(); if(!element.isNull()) { QDomNamedNodeMap list = element.attributes(); for(int i = 0; i<list.count(); i++) { xmlDate.insert(list.item(i).nodeName(),list.item(i).nodeValue()); qDebug()<<list.item(i).nodeName(); } } node = node.nextSibling(); } return xmlDate; } bool DLFileIOSystem::DJWriteXML() { qDebug()<<"XML 讀取函式執行"; QFile file("./config.xml"); //開啟XMl檔案 if(!file.open(QFile::ReadWrite | QFile::Text | QFile::Truncate)) //這裡需要注意的是,寫入檔案的時候需要以覆蓋的方式 { QMessageBox::information(NULL,"Title","Open File False"); //如果開啟失敗則提示 } QTextStream out(&file); QTextCodec *codec = QTextCodec::codecForName("gbk"); out.setCodec(codec); QDomDocument doc; //把檔案內容寫入到doc中 doc.setContent(&file); QDomElement root = doc.createElement("Root"); QDomElement date = doc.createElement("XMLDate"); QStringList list = xmlDate.keys(); for(int i = 0; i<list.count(); i++) { date.setAttribute(list.at(i),xmlDate.value(list.at(i)).toString()); } root.appendChild(date); QString strHead("version = \"1.0\" encoding = \"GB2312\""); doc.appendChild(doc.createProcessingInstruction("xml",strHead)); out<<doc.toString(); root.save(out,2); file.close(); //關閉檔案 QMessageBox::warning(NULL,"提示","檔案寫入完成"); return true; }
這裡要參考以為牛逼大大的文章
剩下的就不用在說了,看到前面
這裡還有一個問題了就是,前幾天沒有弄出來的一點,這裡要說明一下,
// property JSON date : FileIOSystem.DLReadFile() // property QJSON name: value property var xmljson: FileIOSystem.DLReadXML()
只有最後一種方式是正確的,把C++傳來的QJsonObject定義成一個json屬性
完了就可以在後面的內容中愉快的使用了
程式碼結構