檔案格式
根據檔案格式來讀寫,對應起來分析,想要更複雜的自己按格式建立,讀取就可以了,有問題可以評論噢~,讀取的時候如果有問題可以參考我另外一個文章!
<?xml version="1.0" encoding="UTF-8"?>
<TT>
<Fiter0>
<group id="Al">
<name>Al(鋁)</name>
<energy>1.3,1.59</energy>
</group>
<group id="V">
<name>V(釩)</name>
<energy>4.8,5.1</energy>
</group>
</Fiter0>
<Fiter1>
<group id="As">
<name>As(砷)</name>
<energy>10.23,10.83</energy>
</group>
<group id="Zr">
<name>Zr(锆)</name>
<energy>15.4,16.1</energy>
</group>
</Fiter1>
<Fiter2>
<group id="Ag">
<name>Ag(銀)</name>
<energy>21.6,22.6</energy>
</group>
<group id="Te">
<name>Te(碲)</name>
<energy>26.82,27.9</energy>
</group>
</Fiter2>
</TT>
建立XML檔案
//打開或建立檔案
QFile file("config/Element.xml"); //相對路徑、絕對路徑、資源路徑都可以
if(!file.open(QFile::WriteOnly|QFile::Truncate)) //可以用QIODevice,Truncate表示清空原來的内容
return;
QDomDocument doc;
//寫入xml頭部
QDomProcessingInstruction instruction; //添加處理指令
instruction=doc.createProcessingInstruction("xml","version=\"1.0\" encoding=\"UTF-8\"");
doc.appendChild(instruction);
QDomElement root2=doc.createElement("TT");
doc.appendChild(root2);
//添加根節點
for(int i = 0;i<3;i++)
{
QDomAttr attr_id = doc.createAttribute("id"); //建立元素名
attr_id.setValue(elem.str_Id);
QDomElement root_group = doc.createElement("group"); //建立組元素, 名字是元素名
root_group.setAttributeNode(attr_id);
QDomElement element_root = doc.createElement(("name")); //建立組下面的元素
QDomNode node = doc.createTextNode(elem.str_Name);
element_root.appendChild(node);
QDomElement element_rmt = doc.createElement("energy"); //建立組下面的元素
QDomNode nodeenery = doc.createTextNode(elem.list_energy[0].toString()+","+elem.list_energy[1].toString());
element_rmt.appendChild(nodeenery);
root_group.appendChild(element_root);
root_group.appendChild(element_rmt); // 将元素加入到建立的組中
root.appendChild(root_group); //将小組放入大組
}
}
QTextStream out_stream(&file);
doc.save(out_stream,4); //縮進4格
file.close();
讀取XML資料
QFile file("config/Element.xml"); //相對路徑、絕對路徑、資源路徑都行
if(!file.open(QFile::ReadOnly))
return;
QDomDocument doc;
if(!doc.setContent(&file))
{
file.close();
return;
}
file.close();
QDomElement root=doc.documentElement(); //傳回根節點
qDebug()<<root.nodeName();
for(int i = 0; i<3;i++)
{
QDomNode node=root.firstChild().firstChild(); //獲得第一個子節點 下的第一組
while(!node.isNull()) //如果節點不空
{
if(node.isElement()) //如果節點是元素
{
QDomElement e=node.toElement(); //轉換為元素,注意元素和節點是兩個資料結構,其實差不多
QString ID= e.attribute("id");
QDomNodeList list=e.childNodes();
for(int i=0;i<list.count();i++) //周遊子元素,count和size都可以用,可用于标簽數計數
{
QDomNode n=list.at(i);
if(node.isElement())
qDebug()<<n.nodeName()<<":"<<n.toElement().text();
}
}
node=node.nextSibling(); //下一個兄弟節點,nextSiblingElement()是下一個兄弟元素,都差不多
}
}