http://mobile.51cto.com/symbian-268953.htm 本文介绍的是在Qt使用QDomDocument类实现XML文件的操作,QDomNode类是一个父类,QDomDocument是QDomNode的一个子类,鉴于大部分QDomNode的类型都是QDomDocument。 XML,全称为扩展标记语言(extensible markup language).是一种非常方便的数据交换工具。现在Blog的订阅系统输出格式就是满足XML规范的RSS格式,还有SVG矢量图形也使用了XML格式。 我们在取得一个XML格式的文件后,需要作句法分析去提取发布方提供的信息。而Qt为XML提供了很好的支持,包括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)
如果上面的步骤没出错,那么恭喜你,你已经得到了一个完整的QDomDocument对象doc,你只要访问doc的子节点或子子节点就可以取得XML中所有标记上的内容了。 (3) 可以通过doc.childNodes()获得doc的所有的子节点列表QDomNodeList。比如
通过上面的方法你就能知道每个节点的名字和类型了,节点名字就是标记的名字。打印出来对照着xml文件看就很容易明白了。QDomNode类是一个父类,QDomDocument是QDomNode的一个子类,鉴于大部分QDomNode的类型都是QDomDocument.那么你可以使用toDocument()函数将QDomNode类型转换成QDomDocument.
上面的语句可以将一个节点里的文本取出,也就是标记内的文本部分。使用该函数获得的编码就已经是unicode格式了,不需要再做转换。 小结:对于Qt使用QDomDocument操作XML文件的内容讲解完了,希望本篇文章对你有所帮助吧。 |
一 API介绍 readNext():从xml输入流中读取下一个记号 name():记号的名称,即<名称></名称> isStartElement():判断当前已读取的记号是否为开始元素,开始元素即<> isEndElement():判断当前已读取的记号是否为结束元素,结束元素即</> readElementText():读取当前记号对应的文本值,<>文本值</> atEnd():判断是否为文件结尾 二 应用实例 对短信message.xml进行读取,xml内容如下: <?xml version="1.0" encoding="UTF-8"?> 读取代码如下:
|
|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )
GMT+8, 2024-11-23 03:33 , Processed in 0.063654 second(s), 23 queries .
Powered by Discuz! X3
© 2001-2013 Comsenz Inc.