QtXML(一)

文档名称

Qt之XML

创建时间

2012-10-10

修改时间

2012-10-10

创建人

Baifx

简介(收获)

最近开始使用QtXml,学习了一番,写了几个小测试程序。

Qt的XML模块支持流行的两种XML解析方法,DOM和SAX。两种方法各有优缺点,DOM方法将XML文件表示成一棵树,便于随机访问其中的节点,但消耗内存相对多一些。SAX是一种事件驱动的XML API,速度快,但不便于随机访问任意节点。通常根据实际应用选用合适的解析方法。在Qt4.3中还引入了一种基于流的XML解析方法。

DOM

DOM(文件对象模型,Document Object Model)是W3C开发的独立于平台和语言的接口,它可以使程序和脚本能够动态地存取和更新XML文档的内容、结构和风格。DOM有Level1、2和3三个级别的规范。Qt支持DOM Level2规范。

DOM在内存中将XML文件表示为一棵树,用户通过API可以随意地访问树的任意节点内容。在Qt中,XML文档自身使用QDomDocument表示,所有的节点类都从QDomNode继承。其继承关系如下图所示:

QDomDocument::setContent()完成XML文档的设置,他从QFile对象中读取XML数据并检测XML文档的编码。setContent()有几种重载形式,可以分别从QByteArray、QString、QIODevice、QXmlInputSource中读取XML数据。

实例一使用DOM方法生成XML文件:

int main(int argc, char *argv[])

{

QFile file( "domwrite.kdevelop" );

if ( !file.open( QIODevice::WriteOnly | QIODevice::Truncate ) )

return 0;

QDomDocument doc;

QDomText text;

QDomElement element;

QDomProcessingInstruction instruction;

instruction = doc.createProcessingInstruction( "xml", "version = \'1.0\'" );

doc.appendChild( instruction );

QDomElement root = doc.createElement( "kdevelop" );

doc.appendChild( root );

QDomElement general = doc.createElement( "general" );

root.appendChild( general );

element = doc.createElement( "author" );

text = doc.createTextNode( "zeki" );

element.appendChild( text );

general.appendChild( element );

element = doc.createElement( "email" );

text = doc.createTextNode( "caizhiming@tom.com" );

element.appendChild( text );

general.appendChild( element );

element = doc.createElement( "version" );

text = doc.createTextNode( "$VERSION" );

element.appendChild( text );

general.appendChild( element );

QDomElement keywords = doc.createElement( "keywords" );

element = doc.createElement( "keyword" );

text = doc.createTextNode( "C++" );

element.appendChild( text );

keywords.appendChild( element );

general.appendChild( keywords );

element = doc.createElement( "ignoreparts" );

general.appendChild( element );

QDomElement kdevfileview = doc.createElement( "kdevfileview" );

QDomElement groups = doc.createElement( "groups" );

element = doc.createElement( "group" );

QDomAttr pattern = doc.createAttribute( "pattern" );

pattern.setValue( "*.cpp;*.cxx;*.h" );

QDomAttr name = doc.createAttribute( "name" );

name.setValue( "Sources" );

element.setAttributeNode( pattern );

element.setAttributeNode( name );

groups.appendChild( element );

kdevfileview.appendChild( groups );

root.appendChild( kdevfileview );

QTextStream out( &file );

doc.save( out, 4 );

return 0;

}

实例二使用DOM方法解析上面生成的XML文件:

int main(int argc, char *argv[])

{

QDomDocument doc( "kdevelop" );

QFile file( "domwrite.kdevelop" );

if ( !file.open( QIODevice::ReadOnly ) )

return 0;

if ( !doc.setContent( &file ) )

{

file.close();

return 0;

}

file.close();

QDomElement root = doc.documentElement();

QDomElement child = doc.firstChildElement().firstChildElement();

while ( !child.isNull() )

{

QString sTagName = child.tagName();

if ( sTagName == "general" )

{

QDomElement element = child.firstChildElement();

while ( !element.isNull() )

{

if ( element.tagName() == "author" )

{

QString author = element.text();

}

else if ( element.tagName() == "email" )

{

QString email = element.text();

}

else if ( element.tagName() == "version" )

{

QString version = element.text();

}

else if ( element.tagName() == "keywords" )

{

QDomElement keyword = element.firstChildElement();

if ( keyword.tagName() == "keyword" )

{

QString sWord = keyword.text();

}

}

element = element.nextSiblingElement();

}

}

else if ( sTagName == "kdevfileview" )

{

QDomElement element = child.firstChildElement().firstChildElement();

QString pattern = element.attribute( "pattern" );

QString name = element.attribute( "name" );

}

child = child.nextSiblingElement();

}

return 0;

}

Qt之XML(一) DOM的更多相关文章

  1. QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QXmlStreamReader/QXmlStreamWriter实现Qt下xml文件读写   ...

  2. Qt之xml文件解析

    XML文件简介 XML - EXtensible Markup Language,可拓展标记语言 Qt中加载XML模块 .pro 文件中添加 QT += xml Qt的XML访问方式 引用:https ...

  3. Java知识积累-XML的DOM解析修改和删除方法

    import java.io.File; import java.io.IOException; import javax.xml.parsers.DocumentBuilder;import jav ...

  4. 用java操作XML文件(DOM解析方式)

    XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...

  5. xml语法、DTD约束xml、Schema约束xml、DOM解析xml

    今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...

  6. 使用jaxp对比xml进行DOM解析

    /*DOM解析编程 •遍历所有节点 •查找某一个节点 •删除结点 •更新结点 •添加节点 /* package cn.itcast.jaxp; import java.io.File; import ...

  7. Java XML DOM解析范例源码

    下边内容内容是关于Java XML DOM解析范例的内容.import java.io.InputStream; import java.util.ArrayList; import java.uti ...

  8. mybatis源码-解析配置文件(一)之XML的DOM解析方式

    目录 简介 Java 中 XML 文件解析 解析方式 DOM 解析 XML 新建 XML 文件 DOM 操作相关类 Java 读取 XML 文件 一起学 mybatis @ 简介 在之前的文章< ...

  9. python parse xml using DOM

    demo: import xml.dom.minidom dom=xml.dom.minidom.parse('sample.xml')root = dom.documentElementcc=dom ...

随机推荐

  1. 精通 Oracle+Python,第 6 部分:Python 支持 XML

    无可辩驳的是,XML 现在是软件中信息交换的实际标准. 因此,Oracle 数据库附带了各种与 XML 相关的增强和工具,它们统称为 Oracle XML DB.XML DB 包含一系列嵌入到数据库中 ...

  2. flash player over linux

    flashplayer官方网址:https://get.adobe.com/cn/flashplayer/ flash插件安装方法一(适用于ubuntu等linux系统):               ...

  3. WPF样式资源文件简单运用

    WPF通过资源来保存一些可以被重复利用的样式,下面的示例展示了简单的资源样式文件的使用: 一.xaml中定义资源及简单的引用 <Window.Resources > <!--wpf窗 ...

  4. C# 数据结构 线性表(顺序表 链表 IList 数组)

    线性表 线性表是最简单.最基本.最常用的数据结构.数据元素 1 对 1的关系,这种关系是位置关系. 特点 (1)第一个元素和最后一个元素前后是没有数据元素,线性表中剩下的元素是近邻的,前后都有元素. ...

  5. LINQ小记

     //LINQ 根据长度查询出来            string[] strs = new string[] { "1", "22", "333& ...

  6. [BZOJ 1040] [ZJOI2008] 骑士 【基环+外向树DP】

    题目链接:BZOJ - 1040 题目分析 这道题目的模型就是一个图,不一定联通,每个连通块的点数等于边数. 每个连通块都是一个基环+外向树.即树上增加了一条边. 如果是树,就可以直接树形DP了.然而 ...

  7. Google将向IETF标准提交QUIC协议提案

    Google近期宣布,他们将向IETF提交实验性传输层网络协议QUIC的提案.此外,Google已经给出了QUIC协议优化页面加载时间的第一手数据. 自从2013年引入QUIC以来,Google一直在 ...

  8. C语言嵌入式系统编程修炼之二:软件架构篇

    模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求.C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行 ...

  9. Android - N级树形结构实现

    目前已经实现3级之内的任意级树形结构展示(如果想增加更多级,需要扩展排序算法),并支持单选和多选(使用不同的适配器). 实现使用的控件:ListView 首先,最重要的应该是数据源的格式,支持树形结构 ...

  10. 【转】 学习ios(必看经典)牛人40天精通iOS开发的学习方法【2015.12.2

    原文网址:http://bbs.51cto.com/thread-1099956-1.html 亲爱的学员们: 如今,各路开发者为淘一桶金也纷纷转入iOS开发的行列.你心动了吗?想要行动吗?知道如何做 ...