使用tinyxml解析xml数据相比QDOM差不多是相同的,但是TinyXML更加通用。所以应用范围更广。下面来介绍这个类库。
» Read more: 使用第三方TinyXml类库解析XML文件
Posts Tagged ‘XML’
使用第三方TinyXml类库解析XML文件
September 28th, 2013Qt学习之路——XML Editor
September 22nd, 2013接着刚才的Write XML来写。。。。。
这个Editor有界面,我使用MVC的方式,插入数据都通过QStandardItem来插入,这个model都是tree view,通过QDomDocument里面的setContent()方法导入。然后就是通过firstChildElement来找到root节点,然后开始下面的工作。
XML数据与上一节内容相同,这里不再赘述。
XML读写流程 QDomElement -> QDomNodeList -> toElement ->…..
QDomElement xmlroot = document.firstChildElement(); QDomNodeList books = xmlroot.elementsByTagName("Book"); QDomElement book = books.at(i).toElement(); QDomNodeList chapters = book.elementsByTagName("Chapter"); QDomElement chapter = chapters.at(h).toElement();
其实感觉tree view model插入方式和QDomDocument方式很类似,都是要找到root节点,才能向后插入
model层级关系:root->bookitem->chapteritem
void Dialog::ReadFile() { QStandardItem *root = new QStandardItem("Books"); model->appendRow(root); QDomDocument document; QFile file(FileName); if(file.open(QIODevice::ReadOnly | QIODevice::Text)) { document.setContent(&file); file.close(); } QDomElement xmlroot = document.firstChildElement(); QDomNodeList books = xmlroot.elementsByTagName("Book");//通过root我找到child节点Book for(int i =0;i<books.count();i++) { QDomElement book = books.at(i).toElement(); QStandardItem *bookitem = new QStandardItem(book.attribute("Name")); QDomNodeList chapters = book.elementsByTagName("Chapter"); for(int h= 0;h<chapters.count();h++) { QDomElement chapter = chapters.at(h).toElement(); QStandardItem *chapteritem = new QStandardItem(chapter.attribute("Name")); bookitem->appendRow(chapteritem); } root->appendRow(bookitem); } } void Dialog::WriteFIle() //写的原理和读其实很类似,,他是从model中获取item而已,然后回复这个xml节点信息。 { QDomDocument document ; QDomElement xmlroot = document.createElement("Books"); document.appendChild(xmlroot); QStandardItem *root = model->item(0,0); for(int i= 0;i < root->rowCount();i++) { QStandardItem *book = root->child(i,0); QDomElement xmlbook = document.createElement("Book"); xmlroot.appendChild(xmlbook); xmlbook.setAttribute("Name",book->text()); xmlbook.setAttribute("ID",i); for(int h =0 ;h< book->rowCount();h++) { QStandardItem *chapter = book->child(h,0); QDomElement xmlchapter = document.createElement("Chapter"); xmlchapter.setAttribute("Name",chapter->text()); xmlchapter.setAttribute("ID",h); xmlbook.appendChild(xmlchapter); } } // QFile file(FileName); QFile file("/home/lzz/test.xml"); if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) { qDebug() << "Failed to write file"; } QTextStream stream(&file); stream << document.toString(); file.close(); qDebug() << "Finished!!!"; }
Qt学习之路——Read XML with DOM
September 22nd, 2013接着昨天的来讲写XML来讲,最大的问题就是要分清root与children节点。要知道你是在哪个节点操作的,是子节点还是父节点。
然后配合使用API来解析就可以了。我们要知道Tag就是<>中的属性。attribute就是属性值。 » Read more: Qt学习之路——Read XML with DOM
在Qt中编写XML文件
September 21st, 2013对于XML文件,大家应该都会太陌生,只要定义好了XML的格式,我们就可以用来传送数据了。
XML本身没有什么表示,他不像HTML那样表现数据,每个Node也没有什么具体的含义,全部靠编程者自己定义。 » Read more: 在Qt中编写XML文件