- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Qt中使用DOM对XML进行的各种解析
Qt中使用DOM对XML进行的各种解析(总结)
前几天因为底层拓扑结构发生了变化,导致拓扑文件发生了变化,我负责的对于拓扑文件的解析操作自然也就要推到重来。利用上个周末的时间,把这个任务搞定了,顺便也利用这个时间好好总结下这次学到的知识。
我们知道,QT中对于XML文件的读写无非就两种方式,DOM和SAX,两种方法的具体介绍如下:
/***************************************我是传说中的分割线**************************************************************/
用于读取和操作 XML 文件的标准是文档对象模型DOM。 DOM为 XML 文档的已解析版本定义了一组接口。解析器读入整个文档,然后构建一个驻留内存的树结构,然后您的代码就可以使用 DOM 接口来操作这个树结构。您可以遍历树以了解原始文档包含了什么,您可以删除树的几个部分,还可以重新排列树和添加新的分支,等等。遗憾的是,因为DOM 方法涉及读取整个文件并将该文件存储在一个树结构中,而这样可能是低效的、缓慢的,并且很消耗资源:DOM 构建整个文档驻留内存的树。如果文档很大,就会要求有极大的内存。 DOM 创建表示原始文档中每个东西的对象,包括元素、文本、属性和空格。如果您只需关注原始文档的一小部分,那么创建那些永远不被使用的对象是极其浪费的。DOM 解析器必须在您的代码取得控制权之前读取整个文档。对于非常大的文档,这会引起显著的延迟。 这些仅仅是由文档对象模型的设计引起的问题;撇开这些问题,DOM API 是解析 XML 文档非常有用的方法。
一种替代技术就是SAX。相比于文档对象模型DOM,SAX 是读取和操作 XML 数据的更快速、更轻量的方法。SAX 允许您在读取文档时处理它,从而不必等待整个文档被存储之后才采取操作。它不涉及 DOM所必需的开销和概念跳跃。
SAX API是一个基于事件的 API,适用于处理数据流,即随着数据的流动而依次处理数据。SAX API 在其解析您的文档时发生一定事件的时候会通知您。在您对其响应时,您不作保存的数据将会被抛弃。
/***************************************我是华丽的分割线**********************************************************************/
我们可以看到,如果所要读取的XML文件不是很大,采用DOM读取方法还是很便捷的,由于我用的也是DOM树读取的方法,所以,本文所介绍的也主要是基于DOM的方法读取。
根据常用的操作,我简单的把对XML的操作分为以下几类:
1 首先对XML文件进行操作,打开文件。
这个其实就是对文件进行操作,可以把它直接定义为构造函数,在对对象进行初始化时完成。
TopoDataReader::TopoDataReader const wstring filePath :_filePath filePath ,_qDomDoc mydocument ,_qFile QString::fromStdWString filePath if !_qFile.open QIODevice::ReadOnly return;
if !_qDomDoc.setContent _qFile _qFile.close ; return; 2 读取XML文件中的节点内容
假设XML文件格式如下
1 switch snmpip 211.87.235.136 newwork front 2
211.87.235.136
对于第一种情况,采用如下方法:
QDomElement docElem _qDomDoc.documentElement ;
QDomNode nodeswitch docElem.elementsByTagName switch ;//红色的为标签名
QDomElement elemnodeswitch nodeswitch.toElement ;
string snmpip qPrintable elemnodeswitch.attribute snmpip ;//network的也是如此方法获取
对于第二种情况,采用如下方法:
直接调用text API就可以了
string ip qPrintable elementnodeip.text ;
但是,假设文件中有多个同样的节点,如下 这样用elementsByTagName b 返回的就是一个childNodes 而不是一个单独的node了。
我们可以使用at()方法具体定位。
另外,我们还可以使用这
您可能关注的文档
最近下载
- 24点题目(200题)与答案种数.docx VIP
- 本特勒电动汽车平台电池包技术--本特勒BENTELER.pdf VIP
- 中国金融移动支付 远程支付应用 第4部分:文件数据格式规范.pdf VIP
- 2022年小学数学新课标解读.pdf VIP
- 河北省围场满族蒙古族自治县2025年上半年事业单位公开招聘教师岗试题含答案分析.docx VIP
- 电子工业洁净厂房设计规范完整版2024.pdf VIP
- 2024年艺术文化生活娱乐知识竞赛-趣味知识竞赛考试历年真题荟萃带答案.docx VIP
- 石油科技成果间接经济效益计算方法.ppt VIP
- 生菜全程机械化技术规范.pdf
- 行为习惯养成教育主题班会PPT课件.pptx VIP
文档评论(0)