文件格式
根据文件格式来读写,对应起来分析,想要更复杂的自己按格式创建,读取就可以了,有问题可以评论噢~,读取的时候如果有问题可以参考我另外一个文章!
<?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()是下一个兄弟元素,都差不多
}
}