QT解析XML的三种方式
1-QT QXmlStreamReader用法小结
解析常用到的函数含义:
1——导入一个xml文件或字符串的方式
//方式一QXmlStreamReader reader(sXMLContent);//字符串的xml//方式二QXmlStreamReader reader;reader.addData(sXMLContent);//要解析的字符串//方式三QFile f("./test/xml);
reader.setDevice(f);//要解析的xml文件
实例:具体代码步骤可以根据自己的解析需求来写,并没有一个固定的代码可以解决所有的XML解析;解析出某个节点下的所有属性值如下:
bool ParseXmlTools::parseXmlByXsr(const QString sXmlSrc,const QString sTagName,const QString sAtrribute,QString &sAtrributeValue,QString &sErrorMsg)
{ QXmlStreamReader xsrReader;xsrReader.addData(sXmlSrc);//要解析的XMLwhile(!xsrReader.atEnd()){//函数从输入流中读取下一个标签xsrReader.readNext();if(xsrReader.isStartElement() && xsrReader.name() == sTagName){ //获取标签的属性QXmlStreamAttributes attrs = xsrReader.attributes();foreach(QXmlStreamAttribute attr, attrs) {//结果sNodeName = attr.name().toString(); //获得属性名;sNodeValue = attr.value().toString(); //获得属性值; }
/************
如果是想获取某个节点下的某个属性的属性值
if(attrs .hasAttribute(sAtrribute)){sAtrributeValue = xsaAttributes.value(sAtrribute).toString();break;}
*************/}}return true;
}
注:readNext()每调用一次都将生成一个新记号,每次调用readNext()之后,都可以使用isStarElement(),isCharacters()及类似的函数来测试当前记号类型。
2-DOM
1根据DOM,XML文档中的每个成分都是一个节点
2 三个重要的 XML DOM 节点属性是:
nodeName
nodeValue
nodeType
nodeName 属性规定节点的名称。
nodeName 是只读的
元素节点的 nodeName 与标签名相同
属性节点的 nodeName 是属性的名称
文本节点的 nodeName 永远是 #text
文档节点的 nodeName 永远是 #document
nodeValue 属性规定节点的值。
元素节点的 nodeValue 是 undefined
文本节点的 nodeValue 是文本自身
属性节点的 nodeValue 是属性的值
或许你会想知道怎么直接获得某个标签下的属性值:
示例:
bool ParseXmlTools::parseXmlByDom(const QString sXmlSrc,const QString sTagName, const QString sAtrribute,QString &sAtrributeValue, QString &sErrorMsg)
{/***************1 入参判断2 设置DOM树 开始解析XML3 开始循环读取标签4 得到属性值,并赋值传出去*****************///传入的参数不能为空if( sXmlSrc.isEmpty() || sTagName.isEmpty() || sAtrribute.isEmpty() ){sErrorMsg = QString::fromLocal8Bit("参数不能为空");return false;}QDomDocument dDoc;int iErrorLine;int iErrorCol;//第二个参数设为false的原因__禁用命名空间的处理if(!dDoc.setContent(sXmlSrc,false,&sErrorMsg,&iErrorLine,&iErrorCol)){sErrorMsg = QString::fromLocal8Bit("解析失败");return false;}//获取根节点QDomElement deRootNode = dDoc.documentElement();if(deRootNode.tagName() == "message"){QDomNode dnChild = deRootNode.firstChild();while(!dnChild.isNull()){if(dnChild.toElement().tagName() == sTagName){if(dnChild.hasAttributes()){sAtrributeValue = dnChild.toElement().attribute(sAtrribute);}}dnChild = dnChild.nextSibling();}}return true;
}
3-SAX
1当处理器遇到一个标签的开始时,会发出“新开始一个标签”这个通知,也就是一个事件;
2 没出现一个事件,都会有一个回调
或许你会感兴趣
QT生成XML(QXmlStreamWriter或DOM)
QT解析XML的三种方式相关推荐
- Java解析Xml的三种方式总结
转自:http://blog.csdn.net/zjf280441589/article/details/50613881 XML解析技术有两种 DOM SAX DOM方式 根据XML的层级结构在内 ...
- Android解析XML的三种方式
在Android中提供了三种解析XML的方式:DOM(Document Objrect Model),SAX(Simple API XML),以及Android推荐的Pull解析方式. 如图: 本篇博 ...
- convert android layout xml,详解Android之解析XML文件三种方式(DOM,PULL,SAX)
1.xml文件代码 ${fq.content} ${fq.time} 2.XML网页效果图 3.Android代码 1.布局文件 xmlns:tools="http://schemas.an ...
- java解析xml的三种方法
java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax;import org.xml.sax.Attributes; import org.xml.sax.SAXEx ...
- java解析xml的几种方式
java解析xml的几种方式 博客分类: java基础备忘-好记性不然烂笔头 XMLJava应用服务器数据结构编程 第一种:DOM. DOM的全称是Document Object Model,也即文 ...
- QT读写Sqlite数据库三种方式
QT对一些基本的数据库的访问封装,可谓是极大的方便的我们开发人员,现在我们就来说下QT对Sqlite这个数据库的读写,Sqlite是一个比较小型的本地数据库,对于保存一些软件配置参数或量不是很大的数据 ...
- QT写word的三种方式
最近项目里用到了QT写word,入了不少坑,也有了一些很基础的认识,简单说说,希望能帮到大家. 三种方式如下: 1.通过html (优点生成速度快,有点html.css基础就能上车:缺点是只支持css ...
- java解析xml文件四种方式介绍、性能比较和基本使用方法
2019独角兽企业重金招聘Python工程师标准>>> 一.基本介绍: 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准. ...
- php 解析返回的xml,php解析xml的几种方式
php提供几种解析xml的类或方法,包括:Xml parser. SimpleXML,.XMLReader,.DOMDocument. XML Expat Parser: XML Parser使用Ex ...
最新文章
- R语言ggplot2可视化自定义图例(legend)方框(box):所有图例没有方框、每个图例分别在不同的方框中、多个图例放置在同一个方框中
- Windows 中进程的相关操作
- gorm 密码字段隐藏_非常专业且免费的密码管理工具
- poj 1654 Area 多边形面积
- 搭建推荐系统所需要的材料
- jQuery获取URL参数
- weka分类器怎么设置样本类别_NeurIPS 2019 少样本学习研究亮点全解析
- 感觉自己做这个题的思路很不错 1225 Digit Counting
- python将py文件编译成二进制文件 加密
- Python——Youki觉得好用的Object父类的属性方法
- [POJ2195]Going Home(带权最大匹配,KM,最小费用流)
- 删除none 的images报错 image has dependent child images 解决办法
- 35+大龄程序员被清退?
- clustalw序列比对_序列比对,科研必备的几款软件
- 怎么使用人人译视界压制视频?人人译视界for Mac压制视频的图文教程
- 信息系统项目管理师考试经验和心得
- 简单JAVA版本淘宝客程序上线
- 老男孩28期学员卞勃森决心书
- Unable to check if JNs are ready for formatting 问题解决
- 新东方校长俞敏洪给我们的告诫。