Qt使用QDomDocument操作XML文件

移动开发
QDomNode类是一个父类,QDomDocument是QDomNode的一个子类,鉴于大部分QDomNode的类型都是QDomDocument。.那么你可以使用toDocument()函数将QDomNode类型转换成QDomDocument。

本文介绍的是在Qt使用QDomDocument类实现XML文件的操作,QDomNode类是一个父类,QDomDocument是QDomNode的一个子类,鉴于大部分QDomNode的类型都是QDomDocument。

XML,全称为扩展标记语言(extensible markup language).是一种非常方便的数据交换工具。现在Blog的订阅系统输出格式就是满足XML规范的RSS格式,还有SVG矢量图形也使用了XML格式。

我们在取得一个XML格式的文件后,需要作句法分析去提取发布方提供的信息。而QtXML提供了很好的支持,包括DOM的实现和SAX的实现。

DOM是Document Object Model的简称,其实现方式是将整个文档当作一个对象来装入内存进行处理,然后开发者可以访问这个对象中的每一个节点,每一个节点对应XML文件里的一个标记。这种方式的优点是操作非常简单,缺点是需要将整个文件放入内存,不适合处理过大文件。这种方式在Qt中的实现类是QDomDocument,也是本文将要讲解的。以Blog为代表的RSS文件都不会很大,适合用这种方式来处理。

SAX是Simple API for XML的简称,其实现方式是按阶段将文档读取到内存中,在碰到标签或者其它阶段的时候,调用开发者预先设计好的回调函数去处理。这种方式的缺点是需要开发者写回调函数去处理不同标签,代码复杂一些,优点是能处理很大的XML文件。这种方式在Qt中的实现类叫QXmlStreamReader。

下面部分是代码讲解

(1)如果需要使用QDomDocument,那么请在你的项目.pro文件里加上一句”QT += xml”,不然无法编译通过。

(2)

  1. QDomDocument doc;  
  2. QFile file(”rss.xml”);  
  3. QString errorStr;  
  4. int errorLine;  
  5. int errorCol;  
  6. //setContent是将指定的内容指定给QDomDocument解析,***参数可以是QByteArray或者是文件名等  
  7. if(!doc.setContent(&file,true,&errorStr,&errorLine,&errorCol))  
  8. {  
  9. //如果出错,则会进入这里。errorStr得到的是出错说明  
  10. //errorLine和errorCol则是出错的行和列  

如果上面的步骤没出错,那么恭喜你,你已经得到了一个完整的QDomDocument对象doc,你只要访问doc的子节点或子子节点就可以取得XML中所有标记上的内容了。

(3)

可以通过doc.childNodes()获得doc的所有的子节点列表QDomNodeList。比如

  1. QDomNodeList list=doc.childNodes();  
  2. for(int i=0;i<list.count();i++){  
  3. QDomNode node=list.at(i);//好的风格当然是把定义写在外面:(  
  4. //qDebug()<<”node name is “<<node.nodeName();  
  5. //qDebug()<<”node type is “<<.nodeType();  

通过上面的方法你就能知道每个节点的名字和类型了,节点名字就是标记的名字。打印出来对照着xml文件看就很容易明白了。QDomNode类是一个父类,QDomDocument是QDomNode的一个子类,鉴于大部分QDomNode的类型都是QDomDocument.那么你可以使用toDocument()函数将QDomNode类型转换成QDomDocument.

  1. QString text=node.toElement().text(); 

上面的语句可以将一个节点里的文本取出,也就是标记内的文本部分。使用该函数获得的编码就已经是unicode格式了,不需要再做转换。

小结:对于Qt使用QDomDocument操作XML文件的内容讲解完了,希望本篇文章对你有所帮助吧。

【编辑推荐】

初识Qt Object 类

新手须知 QT类大全

剖析Qt Quick之QML程序

详谈XML的应用分类及前景

从新手到老手之Qt学习历程

基于Qt Web浏览器设计与实现

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-12-28 10:57:37

2022-03-22 09:41:31

Java编程语言持久化

2009-04-23 13:19:21

创建XMLXML文件Javascript

2009-09-09 18:20:29

C# XML编程

2009-08-18 17:05:08

C#操作xml文件

2011-07-22 08:43:08

XML

2013-06-08 13:29:27

Android开发DOM读取XMLXML解析

2011-06-20 14:18:27

Qt 资源 文件

2009-12-02 14:14:06

PHP DOM-XML

2009-06-10 21:51:42

JavaScript XMLFirefox

2021-09-30 07:26:15

YamlJsonXml

2011-07-20 14:46:59

Cocoa XML 文件

2011-07-05 17:38:52

QT Sqlite

2011-06-23 11:16:39

Qt Excel

2009-08-18 17:11:03

C#操作XML文件

2009-09-16 16:59:05

LINQ to XML

2011-06-09 18:05:00

QT MySql

2009-08-18 16:42:49

C# 操作XML

2011-07-05 14:46:34

2013-02-19 13:42:30

Android开发string
点赞
收藏

51CTO技术栈公众号