QT的XML模块支持流行的两种XML解析方法,DOM和SAX。DOM方法将XML文件表示成一棵树,便于随机访问其中的节点,但消耗的内存相对多一些。在QT中,XML文档自身使用QDomDocument表示,所有的节点类都从QDomNode继承。读取XML文档案例:
QDomDcument doc("test");
QFile file("test.xml");
if( (!file.open(QIODevice::ReadOnly))
return;
if(!doc.setContent(&file))//它从QFile对象中读取XML数据并检测XML文档的编码
{
file.close();
return;
}
file.close();
读取XML文件第一层的所有元素并显示。
QDomElement docElem = doc.documentElement();
QDomNode n = docElem.firstChile();
while(!n.isNull())
{
QDomElement e=n.toElement();
if(!e.isNull)
{
qDebug()<<e.tagName();
}
n = n.nextSibling();
}
创建XML文件必须要先使用QFile创建实在的文件,再通过QTextStream和QDomDocument类关联,这样才可使用QDocument的save()方法来保存DOM树的内容。
SAX(Simple API for XML)是一种事件驱动的XML API,速度快,但不能便于随机访问任意节点。QT4.3中还引入了一种基于流的XML解析方法。
SAX2是一种“推进模型”分析器。程序员提供处理程序,在发生特定事件时(如:一个文档,或一个元素的开始和结束),分析器便调用这些事件的处理程序。SAX2分析器生民这些事件,包括在XML文档内容中发生的事件,在DTD中发生的事件和错误事件。应用程序只需要为感兴趣的事件实现处理程序。如果没有为特定类型的事件实现处理程序,那么该事件将被忽略。
建立一个SAX分析程序的过程是:
1、创建SAXXML.Reader实例;
2、设置处理程序类;
3、设置XML文档的来源;
4、开始分析;
基于流的XML API
QT4.3中引入了QXmlStreamReader和QXmlStreamWriter类。QXmlStreamReader提供了一种快速简单的XML流API,它可以从QIODevice或QByteArray读取XML数据。使用QXmlStreamReader处理XML比使用QT的SAX XML处理器更为自,不需要像SAX程序一样记录大量状态。