Qt中對QDomDocument和QDomnode的理解

一.對QDomDocument和QDomnode的理解node

QDom前綴的都是表明節點類型。因此有,QDomElement表明一個Element節點,而QDomText表明一個Text節點。QDomNode類能夠存儲任意類型的節點。若是想進一步處理一個節點,首先必須把它轉化爲正確的數據類型。QDomNode調用toElement()以把它轉化成QDomElement,而後調用tagName()來得到元素的標籤名稱。若是節點不是Element類型,那麼toElement()函數就返回一個空QDomElement對象和一個空標籤。app

二.幾種操做:dom

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一般用來進行軟件配置spa

Qt中實現對xml讀寫操做的類是QDomDocument相關的類,通常狀況下須要包含下列三個頭文件:code

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

(3)寫XMLxml

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

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文件blog

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文件element

QDomDocument doc;
QFile file("./test.xml");
if (!file.open(QIODevice::ReadOnly))
{
    return false;
}
 
if (!doc.setContent(&file)) 
{
    file.close();
    return false;
}
file.close();
 
相關文章
相關標籤/搜索