Qt解析XML文件(QXmlStreamReader)

(2013-08-03 10:53:53)

转载▼

如何使用QXmlStreamReader来解析格式良好的XML,Qt的文档中指出,它是一种更快、更方便的Qt自己的SAX解析器(QXmlSimpleReader)的替代,它也较快,在某种情况下,比DOM(QDomDocument)更方便。

XML文件:

解析方法:

void ParseXML::parseXML(QString file_name)

{

if(file_name.isEmpty())

return;

QFile *file = new QFile(file_name);

if(!file->open(QFile::ReadOnly | QFile::Text))

{

QMessageBox::information(NULL, QString("title"), QString("open error!"));

return;

}

//QXmlStreamReader操作任何QIODevice.

QXmlStreamReader xml(file);

QList> persons;

//解析XML,直到结束

while(!xml.atEnd() && !xml.hasError())

{

//读取下一个element.

QXmlStreamReader::TokenType token = xml.readNext();

//如果获取的仅为StartDocument,则进行下一个

if(token == QXmlStreamReader::StartDocument)

{

continue;

}

//如果获取了StartElement,则尝试读取

if(token == QXmlStreamReader::StartElement)

{

//如果为persons,直接进入下一个

if(xml.name() == "persons")

{

continue;

}

//如果为person,则对其进行解析

if(xml.name() == "person")

{

persons.append(this->parsePerson(xml));

}

}

}

if(xml.hasError())

{

QMessageBox::information(NULL, QString("parseXML"), xml.errorString());

}

//从reader中删除所有设备、数据,并将其重置为初始状态

xml.clear();

}

QMap ParseXML::parsePerson(QXmlStreamReader& xml)

{

QMap person;

//检查是否获取person

if(xml.tokenType() != QXmlStreamReader::StartElement &&

xml.name() == "person")

{

return person;

}

//获取person属性

QXmlStreamAttributes attributes = xml.attributes();

if(attributes.hasAttribute("id"))

{

person["id"] = attributes.value("id").toString();

}

//操作下一个

xml.readNext();

while(!(xml.tokenType() == QXmlStreamReader::EndElement &&

xml.name() == "person"))

{

if(xml.tokenType() == QXmlStreamReader::StartElement)

{

if(xml.name() == "name")

{

this->addElementDataToMap(xml, person);

}

if(xml.name() == "age")

{

this->addElementDataToMap(xml, person);

}

if(xml.name() == "email")

{

this->addElementDataToMap(xml, person);

}

if(xml.name() == "website")

{

this->addElementDataToMap(xml, person);

}

}

xml.readNext();

}

QString id = person["id"];

QString name = person["name"];

QString age =  person["age"];

QString email = person["email"];

QString website = person["website"];

return person;

}

void ParseXML::addElementDataToMap(QXmlStreamReader& xml,

QMap& map) const

{

if(xml.tokenType() != QXmlStreamReader::StartElement)

{

return;

}

QString elementName = xml.name().toString();

xml.readNext();

if(xml.tokenType() != QXmlStreamReader::Characters)

{

return;

}

map.insert(elementName, xml.text().toString());

}

时间: 2024-08-10 00:04:29

Qt解析XML文件(QXmlStreamReader)的相关文章

QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写

版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写     本文地址:http://techieliang.com/2017/12/714/ 文章目录 1. 介绍  1.1. QXml-Token标记类型  1.2. 范例xml文件 2. 写xml 3. 读xml  3.1. 其他 1. 介绍 帮助文档:QXmlStreamReader.QXmlStr

使用XML序列化器生成XML文件和利用pull解析XML文件

首先,指定XML格式,我指定的XML格式如下: <?xml version='1.0' encoding='utf-8' standalone='yes' ?> <message> <sms> <body> 陈驰0 </body> <date> 1462162910995 </date> <address> 1380 </address> <type> 1 </type> &

解析xml文件的几个步骤

1.生成xml文件的解析器 XmlPullParser parser = Xml.newPullParser(); 2.设置解析器读取流对象的编码格式 parser.setInput(is, "utf-8"); 3.设置解析xml文件之后要存储的位置 List<WeatherInfo> weatherInfo = null; WeatherInfo info = null; 4.定义解析器解析到的事件类型 int type = parser.getEventType();

JS解析XML文件和XML字符串

JS解析XML文件 <script type='text/javascript'>    loadXML = function(xmlFile){        var xmlDoc=null;        //判断浏览器的类型        //支持IE浏览器        if(!window.DOMParser && window.ActiveXObject){            var xmlDomVersions = ['MSXML.2.DOMDocument.

Php 解析XML文件

Php 解析XML文件 Php 解析XML文件,仅供学习参考!示例代码如下: <?php header("Content-type: text/html; charset=utf-8"); if(!isset($_GET["_u"])){ echo "<script>javascript:alert('请勿非法访问!');window.history.back();</script>"; exit(); } $url

SAX解析XML文件

SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准.SAX是一种轻量型的方法,不像DOM解析时,把XML文档全部载入内存中,在PC上操作,Dom还有 优势,但在手机中端上则无优势,因为手机内存和硬件都比不上PC强.使用 SAX 是比较安全的,并且 Android 提供了一种传统的 SAX 使用方法,以及一个便捷的 SAX 包装器.SAX采用基于事件驱动的处理方式,它将XML文档转换成一系列的事件,由单独的事件处理器来决定如何处理. 在SAX接口中,事件源是org

Android开发学习---使用XmlPullParser解析xml文件

Android中解析XML的方式主要有三种:sax,dom和pull关于其内容可参考:http://blog.csdn.net/liuhe688/article/details/6415593 本文将主要介绍pull解析器解析xml文件,环境为ubuntu 12.04+ intelij 13.1 + android sdk 2.1 一.创建一个XML项目,步骤如下: 二.解析一个xml文件: assets/person.xml <?xml version="1.0" encodi

【Android进阶】解析XML文件之使用DOM解析器

在前面的文章中,介绍了使用SAX解析器对XML文件进行解析,SAX解析器的优点就是占用内存小.这篇文章主要介绍使用DOM解析器对XML文件进行解析.DOM解析器的优点可能是理解起来比较的直观,当然,每个人对不同的解析方法可能有不同的喜好.但是DOM解析器有个比较大的缺点,就是占用内存比较多,在Android中的XML解析中,还是更推荐其他的解析方式. 下面介绍使用DOM解析器对XML进行解析. 下面是我们需要解析的xml文件 <?xml version="1.0" encodin

Dom方法,解析XML文件

Dom方法,解析XML文件的基本操作 1 package com.demo.xml.jaxp; 2 3 import java.io.IOException; 4 5 import javax.xml.parsers.DocumentBuilder; 6 import javax.xml.parsers.DocumentBuilderFactory; 7 import javax.xml.parsers.ParserConfigurationException; 8 import javax.x