Qt中對QDomDocument和QDomnode的理解


一.對QDomDocument和QDomnode的理解

QDom前綴的都是代表節點類型。所以有,QDomElement代表一個Element節點,而QDomText代表一個Text節點。QDomNode類可以存儲任意類型的節點。如果想進一步處理一個節點,首先必須把它轉化為正確的數據類型。QDomNode調用toElement()以把它轉化成QDomElement,然后調用tagName()來獲得元素的標簽名稱。如果節點不是Element類型,那么toElement()函數就返回一個空QDomElement對象和一個空標簽。

二.幾種操作:

QFile file(filename);
 
if(file.open(QFile::ReadOnly | QFile::Text)){
std::cerr<<"Error:cannot read file"<<qPrintable(filename)<<":"<<qPrintable(file.errorString())<<std::endl;
return false;
}
QString errorStr;
int line;
int errorColumn;
QDomDocument doc;//定義一個dom文件
 
if(!doc.setContent(&file,false,&line,&errorColumn))
{
        std::cerr<<"error"<<endl;
}
 
QDomElement root = doc.docmentElement();
if(root.tagName() != "book")
{
   .....
}

(1) 對節點的操作

節點操作:

QDomNode child = QDomElement element.firstChild();

while(!child.isNull())

{

          if(child.toElement().tagName() == "myName")

          {

                          

           }

         child = child.nextSibling();

}

(2) XML文件與ini一樣,xml通常用來進行軟件配置

Qt中實現對xml讀寫操作的類是QDomDocument相關的類,一般情況下需要包含下列三個頭文件:

#include <QFile>   
#include <QtXml\QtXml>
#include <QtXml\QDomDocument> 

(3)寫XML

主要會用到下面的幾個函數:

QDomDocument doc;
QDomProcessingInstruction instruction = doc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild(instruction);
 
QDomElement root = doc.createElement("HInfoData");//創建根節點
doc.appendChild(root);//添加根節點
 
QDomElement strMac = doc.createElement("Mac");//創建元素節點
root.appendChild(strMac);//添加元素節點到根節點
QDomText strMacNodeText = doc.createTextNode(data._strMac);//創建元素文本
strMac.appendChild(strMacNodeText);//添加元素文本到元素節點

(4)保存xim文件

QFile file("./test.xml");
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text))
    return false;
QTextStream out(&file);
out.setCodec("UTF-8");
doc.save(out, 4, QDomNode::EncodingFromTextStream);
file.close();

 

(5)讀xml文件

QDomDocument doc;
QFile file("./test.xml");
if (!file.open(QIODevice::ReadOnly))
{
    return false;
}
 
if (!doc.setContent(&file)) 
{
    file.close();
    return false;
}
file.close();
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM