转载请注明链接与作者huihui1988
XML文件由于其扩展性与兼容性的优点,被广泛用作软件和系统的配置文件。这里简要介绍一下QT下如何来解析XML文件。
源代码:
xml_reader.h
- @H_403_24@#ifndefXML_READER_H
- @H_403_24@#defineXML_READER_H
- @H_403_24@#include<QtCore>
- @H_403_24@//#include<QtGui>
- @H_403_24@classxml_reader:publicQXmlStreamReader
- @H_403_24@{
- @H_403_24@//Q_OBJECT
- @H_403_24@public:
- @H_403_24@xml_reader();
- @H_403_24@boolread(QIODevice*device);
- private:
- voidread_data();
- voidread_startweek();
- voidread_eventnumber();
- voidread_period();
- voidread_id();
- voidread_starttime();
- voidread_endtime();
- voidread_exception();
- voidread_subexception();
- voidread_description();
- voidread_duration();
- voidread_event();
- voidread_offsettime();
- voidread_eventdesc();
- voidread_eventname();
- voidread_prompt();
- voidread_lasthandle();
- voidread_unknow();
- @H_403_24@};
- @H_403_24@#endif//XML_READER_H
xml_reader.cpp
copy
- @H_403_24@#include"xml_reader.h"
- @H_403_24@xml_reader::xml_reader()
- @H_403_24@{}
- boolxml_reader::read(QIODevice*device)
- @H_403_24@{
- @H_403_24@setDevice(device);
- while(!atEnd())
- @H_403_24@readNext();
- if(isStartElement())
- if(name()=="data")
- @H_403_24@read_data();
- @H_403_24@}
- @H_403_24@}
- return!error();
- voidxml_reader::read_data()
- @H_403_24@qDebug()<<"Starttoreaddata...";
- if(name()=="period")
- @H_403_24@read_period();
- if(name()=="startweek")
- @H_403_24@read_startweek();
- if(name()=="eventnumber")
- @H_403_24@read_eventnumber();
- if(isEndElement())
- if(name()=="data")
- @H_403_24@qDebug()<<"Nowattheendofdataelement...";
- break;
- voidxml_reader::read_startweek()
- @H_403_24@qDebug()<<"startweekis:"<<readElementText();
- voidxml_reader::read_eventnumber()
- @H_403_24@qDebug()<<"eventNumberis:"<<readElementText();
- voidxml_reader::read_period()
- @H_403_24@qDebug()<<"Starttoreadperiod...";
- while(!atEnd())
- @H_403_24@readNext();
- if(isStartElement())
- if(name()=="id")
- @H_403_24@read_id();
- if(name()=="starttime")
- @H_403_24@read_starttime();
- if(name()=="endtime")
- @H_403_24@read_endtime();
- if(name()=="exception")
- @H_403_24@read_exception();
- if(name()=="duration")
- @H_403_24@read_duration();
- if(name()=="event")
- @H_403_24@read_event();
- if(isEndElement())
- @H_403_24@qDebug()<<"Nowattheendofperiod...";
- break;
- voidxml_reader::read_id()
- @H_403_24@qDebug()<<"idis:"<<readElementText();
- voidxml_reader::read_starttime()
- @H_403_24@qDebug()<<"starttimeis:"<<readElementText();
- voidxml_reader::read_endtime()
- @H_403_24@qDebug()<<"endtimeis:"<<readElementText();
- voidxml_reader::read_exception()
- @H_403_24@qDebug()<<"Starttoreadexception...";
- if(name()=="subexception")
- @H_403_24@read_subexception();
- @H_403_24@qDebug()<<"Nowattheendofexception...";
- voidxml_reader::read_subexception()
- @H_403_24@qDebug()<<"Starttoreadsubexception...";
- if(name()=="description")
- @H_403_24@read_description();
- @H_403_24@qDebug()<<"Nowattheendofsubexception...";
- voidxml_reader::read_description()
- @H_403_24@qDebug()<<"descriptionis:"<<readElementText();
- voidxml_reader::read_duration()
- @H_403_24@qDebug()<<"durationis:"<<readElementText();
- voidxml_reader::read_event()
- @H_403_24@qDebug()<<"Starttoreadevent...";
- if(name()=="id")
- @H_403_24@read_id();
- if(name()=="offsettime")
- @H_403_24@read_offsettime();
- if(name()=="eventdesc")
- @H_403_24@read_eventdesc();
- if(name()=="lasthandle")
- @H_403_24@read_lasthandle();
- @H_403_24@qDebug()<<"Nowattheendofevent..";
- voidxml_reader::read_offsettime()
- @H_403_24@qDebug()<<"offsettimeis:"<<readElementText();
- voidxml_reader::read_eventdesc()
- @H_403_24@qDebug()<<"Starttoreadeventdesc...";
- if(name()=="eventname")
- @H_403_24@read_eventname();
- if(name()=="prompt")
- @H_403_24@read_prompt();
- @H_403_24@qDebug()<<"Nowattheendofeventdesc...";
- voidxml_reader::read_eventname()
- @H_403_24@qDebug()<<"eventnameis:"<<readElementText();
- voidxml_reader::read_prompt()
- @H_403_24@qDebug()<<"promptis:"<<readElementText();
- voidxml_reader::read_lasthandle()
- @H_403_24@qDebug()<<"lasthandleis:"<<readElementText();
- @H_403_24@}