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的三种方式相关推荐

  1. Java解析Xml的三种方式总结

    转自:http://blog.csdn.net/zjf280441589/article/details/50613881 XML解析技术有两种 DOM SAX DOM方式  根据XML的层级结构在内 ...

  2. Android解析XML的三种方式

    在Android中提供了三种解析XML的方式:DOM(Document Objrect Model),SAX(Simple API XML),以及Android推荐的Pull解析方式. 如图: 本篇博 ...

  3. 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 ...

  4. java解析xml的三种方法

    java解析XML的三种方法 1.SAX事件解析 package com.wzh.sax;import org.xml.sax.Attributes; import org.xml.sax.SAXEx ...

  5. java解析xml的几种方式

    java解析xml的几种方式 博客分类: java基础备忘-好记性不然烂笔头 XMLJava应用服务器数据结构编程  第一种:DOM. DOM的全称是Document Object Model,也即文 ...

  6. QT读写Sqlite数据库三种方式

    QT对一些基本的数据库的访问封装,可谓是极大的方便的我们开发人员,现在我们就来说下QT对Sqlite这个数据库的读写,Sqlite是一个比较小型的本地数据库,对于保存一些软件配置参数或量不是很大的数据 ...

  7. QT写word的三种方式

    最近项目里用到了QT写word,入了不少坑,也有了一些很基础的认识,简单说说,希望能帮到大家. 三种方式如下: 1.通过html (优点生成速度快,有点html.css基础就能上车:缺点是只支持css ...

  8. java解析xml文件四种方式介绍、性能比较和基本使用方法

    2019独角兽企业重金招聘Python工程师标准>>> 一.基本介绍: 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准. ...

  9. php 解析返回的xml,php解析xml的几种方式

    php提供几种解析xml的类或方法,包括:Xml parser. SimpleXML,.XMLReader,.DOMDocument. XML Expat Parser: XML Parser使用Ex ...

最新文章

  1. R语言ggplot2可视化自定义图例(legend)方框(box):所有图例没有方框、每个图例分别在不同的方框中、多个图例放置在同一个方框中
  2. Windows 中进程的相关操作
  3. gorm 密码字段隐藏_非常专业且免费的密码管理工具
  4. poj 1654 Area 多边形面积
  5. 搭建推荐系统所需要的材料
  6. jQuery获取URL参数
  7. weka分类器怎么设置样本类别_NeurIPS 2019 少样本学习研究亮点全解析
  8. 感觉自己做这个题的思路很不错 1225 Digit Counting
  9. python将py文件编译成二进制文件 加密
  10. Python——Youki觉得好用的Object父类的属性方法
  11. [POJ2195]Going Home(带权最大匹配,KM,最小费用流)
  12. 删除none 的images报错 image has dependent child images 解决办法
  13. 35+大龄程序员被清退?
  14. clustalw序列比对_序列比对,科研必备的几款软件
  15. 怎么使用人人译视界压制视频?人人译视界for Mac压制视频的图文教程
  16. 信息系统项目管理师考试经验和心得
  17. 简单JAVA版本淘宝客程序上线
  18. 老男孩28期学员卞勃森决心书
  19. Unable to check if JNs are ready for formatting 问题解决
  20. 新东方校长俞敏洪给我们的告诫。

热门文章

  1. C语言字符串转十六进制数例如“2a”转换成0x2a
  2. C++语言实现网络爬虫详细代码
  3. 前端,是一种GUI软件
  4. excel表格里数字和文字混合一起如何把数字提取
  5. 吉林大学操作系统上机(实验四:文件系统——Hash结构文件)
  6. 【BZOJ2725】【Violet 6】故乡的梦
  7. MeeGo系统平板电脑和智能手机明年上市
  8. 云杉网络:开放可编程+细粒度控制 将释放SDN真实价值
  9. C语言奇葩之明明找铅笔
  10. rraylist参数_教程:ray渲参数实例讲解(一)ray_controller的参数解析