QT中使用QXmlStreamReader解析XML文件
来源:互联网 发布:淘宝已评论怎么看不到 编辑:程序博客网 时间:2024/06/06 19:24
转载请注明链接与作者huihui1988
XML文件由于其扩展性与兼容性的优点,被广泛用作软件和系统的配置文件。这里简要介绍一下QT下如何来解析XML文件。
源代码:
xml_reader.h
- #ifndef XML_READER_H
- #define XML_READER_H
- #include <QtCore>
- //#include <QtGui>
- class xml_reader : public QXmlStreamReader
- {
- //Q_OBJECT
- public:
- xml_reader();
- bool read(QIODevice *device);
- private:
- void read_data();
- void read_startweek();
- void read_eventnumber();
- void read_period();
- void read_id();
- void read_starttime();
- void read_endtime();
- void read_exception();
- void read_subexception();
- void read_description();
- void read_duration();
- void read_event();
- void read_offsettime();
- void read_eventdesc();
- void read_eventname();
- void read_prompt();
- void read_lasthandle();
- void read_unknow();
- };
- #endif // XML_READER_H
xml_reader.cpp
- #include "xml_reader.h"
- xml_reader::xml_reader()
- {}
- bool xml_reader::read(QIODevice *device)
- {
- setDevice(device);
- while(!atEnd())
- {
- readNext();
- if(isStartElement())
- {
- if(name() == "data")
- {
- read_data();
- }
- }
- }
- return !error();
- }
- void xml_reader::read_data()
- {
- qDebug()<<"Start to read data...";
- while(!atEnd())
- {
- readNext();
- if(isStartElement())
- {
- if(name() == "period")
- {
- read_period();
- }
- if(name() == "startweek")
- {
- read_startweek();
- }
- if(name() == "eventnumber")
- {
- read_eventnumber();
- }
- }
- if(isEndElement())
- {
- if(name() == "data")
- {
- qDebug()<<"Now at the end of data element...";
- break;
- }
- }
- }
- }
- void xml_reader::read_startweek()
- {
- qDebug()<<"startweek is: "<<readElementText();
- }
- void xml_reader::read_eventnumber()
- {
- qDebug()<<"eventNumber is: "<<readElementText();
- }
- void xml_reader::read_period()
- {
- qDebug()<<"Start to read period...";
- while(!atEnd())
- {
- readNext();
- if(isStartElement())
- {
- if(name() == "id")
- {
- read_id();
- }
- if(name() == "starttime")
- {
- read_starttime();
- }
- if(name() == "endtime")
- {
- read_endtime();
- }
- if(name() == "exception")
- {
- read_exception();
- }
- if(name() == "duration")
- {
- read_duration();
- }
- if(name() == "event")
- {
- read_event();
- }
- }
- if(isEndElement())
- {
- if(name() == "period")
- {
- qDebug()<<"Now at the end of period...";
- break;
- }
- }
- }
- }
- void xml_reader::read_id()
- {
- qDebug()<<"id is: " << readElementText();
- }
- void xml_reader::read_starttime()
- {
- qDebug()<<"starttime is: " << readElementText();
- }
- void xml_reader::read_endtime()
- {
- qDebug()<<"endtime is: " << readElementText();
- }
- void xml_reader::read_exception()
- {
- qDebug()<<"Start to read exception...";
- while(!atEnd())
- {
- readNext();
- if(isStartElement())
- {
- if(name() == "subexception")
- {
- read_subexception();
- }
- }
- if(isEndElement())
- {
- if(name() == "exception")
- {
- qDebug()<<"Now at the end of exception...";
- break;
- }
- }
- }
- }
- void xml_reader::read_subexception()
- {
- qDebug()<<"Start to read subexception...";
- while(!atEnd())
- {
- readNext();
- if(isStartElement())
- {
- if(name() == "id")
- {
- read_id();
- }
- if(name() == "starttime")
- {
- read_starttime();
- }
- if(name() == "endtime")
- {
- read_endtime();
- }
- if(name() == "description")
- {
- read_description();
- }
- }
- if(isEndElement())
- {
- if(name() == "subexception")
- {
- qDebug()<<"Now at the end of subexception...";
- break;
- }
- }
- }
- }
- void xml_reader::read_description()
- {
- qDebug()<<"description is: " << readElementText();
- }
- void xml_reader::read_duration()
- {
- qDebug()<<"duration is: " << readElementText();
- }
- void xml_reader::read_event()
- {
- qDebug()<<"Start to read event...";
- while(!atEnd())
- {
- readNext();
- if(isStartElement())
- {
- if(name() == "id")
- {
- read_id();
- }
- if(name() == "offsettime")
- {
- read_offsettime();
- }
- if(name() == "eventdesc")
- {
- read_eventdesc();
- }
- if(name() == "lasthandle")
- {
- read_lasthandle();
- }
- }
- if(isEndElement())
- {
- if(name() == "event")
- {
- qDebug()<<"Now at the end of event..";
- break;
- }
- }
- }
- }
- void xml_reader::read_offsettime()
- {
- qDebug()<<"offsettime is: " << readElementText();
- }
- void xml_reader::read_eventdesc()
- {
- qDebug()<<"Start to read eventdesc...";
- while(!atEnd())
- {
- readNext();
- if(isStartElement())
- {
- if(name() == "eventname")
- {
- read_eventname();
- }
- if(name() == "prompt")
- {
- read_prompt();
- }
- }
- if(isEndElement())
- {
- if(name() == "eventdesc")
- {
- qDebug()<<"Now at the end of eventdesc...";
- break;
- }
- }
- }
- }
- void xml_reader::read_eventname()
- {
- qDebug()<<"eventname is: " << readElementText();
- }
- void xml_reader::read_prompt()
- {
- qDebug()<<"prompt is: " << readElementText();
- }
- void xml_reader::read_lasthandle()
- {
- qDebug()<<"lasthandle is: " << readElementText();
- }
- #include <QtCore/QCoreApplication>
- #include "XmlPraser.h"
- int main(int argc, char *argv[])
- {
- QCoreApplication a(argc, argv);
- QFile file("praser.xml");
- XmlPraser reader;
- if(file.open(QIODevice::ReadOnly | QIODevice::Text))
- {
- qDebug()<<"File has loaded...";
- reader.read(&file);
- }
- else
- {
- qDebug()<<"No file to read...";
- }
- file.close();
- qDebug()<<"Press ctrl+C to exit...";
- return a.exec();
- }
XML文件范例 praser.xml
- <?xml version="1.0" encoding="GBK" ?>
- <data>
- <startweek>2010-03-01 00:00:00.000</startweek>
- <eventnumber>2</eventnumber>
- <period>
- <id>223401</id>
- <starttime>2010-03-01 00:00:00.000</starttime>
- <endtime>2010-06-20 23:59:59.999</endtime>
- <exception>
- <subexception>
- <id>01</id>
- <starttime>2010-04-03 00:00:00.000</starttime>
- <endtime>2010-04-05 23:59:59.000</endtime>
- <description>清明节放假三天</description>
- </subexception>
- <subexception>
- <id>02</id>
- <starttime>2010-05-01 00:00:00.000</starttime>
- <endtime>2010-05-03 23:59:59.000</endtime>
- <description>五一劳动节放假三天</description>
- </subexception>
- </exception>
- <duration>0000-00-07 00:00:00.000</duration>
- <event>
- <id>01</id>
- <offsettime>0000-00-00 14:00:00.000</offsettime>
- <eventdesc>
- <eventname>编译原理</eventname>
- <prompt>ring</prompt>
- </eventdesc>
- <lasthandle>null</lasthandle>
- </event>
- <event>
- <id>02</id>
- <offsettime>0000-00-03 09:50:00.000</offsettime>
- <eventdesc>
- <eventname>编译原理</eventname>
- <prompt>vibration</prompt>
- </eventdesc>
- <lasthandle>null</lasthandle>
- </event>
- </period>
- </data>
由于是使用的QXmlStrramReader来进行解析,因而所有的节点都需要自己编写函数进行相应的处理。
0 0
- QT中使用QXmlStreamReader解析XML文件
- QT中使用QXmlStreamReader解析XML文件
- QT中使用QXmlStreamReader解析XML文件
- QT中使用QXmlStreamReader解析XML文件
- QT中使用QXmlStreamReader解析XML文件
- QT中使用QXmlStreamReader解析XML文件
- 使用Qt中的QXmlStreamReader读取XML文件
- 使用Qt中的QXmlStreamReader读取XML文件
- QXmlStreamReader解析XML文件
- 使用QXmlStreamReader对xml文件的解析
- Qt编程5:使用QXmlStreamReader解析xml(简单应用)
- Qt之解析XML(QXmlStreamReader)
- Qt之解析XML元素(QXmlStreamReader)
- QT QXmlStreamReader流处理解析XML
- qt 之解析 XML(QXmlStreamReader)
- qt 之解析XML元素(QXmlStreamReader)
- Qt: QXMLStreamReader,读XML文件实例
- Qt:QXMLStreamReader、QXMLStreamWriter,读写XML文件实例
- C与C++的区别
- 【iOS开发-64】微博案例练习:用代码自定义cell,主要内容是针对不同高度的cell
- linux下编译php的amqp扩展(for rabbimq)
- Android一键退出整个应用程序
- linux C 读取目录文件并统计文件数
- QT中使用QXmlStreamReader解析XML文件
- Remove Duplicates from Sorted Array (Java)
- Jmeter自定义函数
- mysql sql语句大全
- [第一天]Win7环境配置Jdk 环境变量
- string与wstring转换
- Linux服务器Tomcat安全配置
- 武汉网站建设技术哪家强,武汉八音猫科技
- Ehcache 整合Spring 使用页面、对象缓存