本文共 2338 字,大约阅读时间需要 7 分钟。
http://blog.sina.com.cn/s/blog_a6fb6cc90101eugv.html
关于XML及其使用场景不在此多做介绍,今天主要介绍Qt中对于XML的解析。QtXml模块提供了一个读写XML文件的流,解析方法包含DOM和SAX,两者的区别是什么呢?
DOM(Document ObjectModel):将XML文件保存为树的形式, 操作简单, 便于访问。 SAX(Simple APIfor XML):接近于底层,速度较快,但不便于访问。 QT += xml
Note that QXmlStream* classes are inQtCore,这句话是说QXmlStreamReader和QXmlStreamWriter不在模块QtXml中,而是在QtCore中,该模块只涉及DOM和SAX基于XML的接口。
void ParseXML::parse(QString file_name)
if(!file.open(QFile::ReadOnly | QFile::Text))
QMessageBox::information(NULL, QString("title"),QString("open error!"));
if(!document.setContent(&file, false, &error, &row,&column))
QMessageBox::information(NULL, QString("title"),QString("parse file failed at line row and column") +QString::number(row, 10) + QString(",") + QString::number(column,10));
QMessageBox::information(NULL, QString("title"),QString("document is null!"));
QDomElement root =document.documentElement();
QString root_tag_name =root.tagName();
if(root.hasAttribute("name"))
QString name =root.attributeNode("name").value();
QDomElement person =root.firstChildElement();
QString person_tag_name= person.tagName();
QString id =person.attributeNode("id").value();
QDomNodeList list =root.childNodes();
QDomNode dom_node = list.item(i);
QDomElement element =dom_node.toElement();
QString id_1 =element.attributeNode("id").value();
QString id_2 = element.attribute("id");
//获取子节点,数目为4,包括:name、age、email、website
QDomNodeList child_list =element.childNodes();
int child_count = child_list.count();
QDomNodechild_dom_node = child_list.item(j);
QDomElement child_element = child_dom_node.toElement();
QStringchild_tag_name = child_element.tagName();
QStringchild__tag_value = child_element.text();
//按照name、age、email、website的顺序获取值
QDomElement element =person.firstChildElement();
QString tag_name = element.tagName();
QString tag_value = element.text();
element = element.nextSiblingElement();
转载地址:http://qriub.baihongyu.com/