XML在Qt中的使用
http://blog.csdn.net/lovebird_27/article/details/50205995 1 XML简介 XML是ExtensibleMarkup Language的缩写,即可扩展标记语言。它是一种用来创建的标记的标记语言。使用XML标记语言可以做到数据或数据结构在任何编程语言环境下的共享。XML中有格式正规的XML和有效的XML。 DTD 的作用是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构。 Schema作用是定义一份XML文档的合法组件群,就像文档类型定义(外语缩写:DTD)的作用一样 若是不了解XML,可以先学习一下XML。
Qt中DOM的使用 //xml中的XML说明对应QDomProcessingInstruction
//xml中的元素对应QDomElement类
//xml中的属性对应QDomArr类
//xml中的文本内容对应QDomText类
//Qt中,所有的Dom节点,比如说明,元素,属性和文本等,都使用QDomNode来表示
//文档本身用 QDomDocument类表示 //访问XML文件
//新建QDomDocument类对象,它代表一个XML文档 QDomDocument doc; // 定义一个文件对象
QFile file("../myDOM1/my.xml"); //setContent()函数设置整个文档内容,将xml文档内容解析为一个DOM树 doc.setContent(&file); 获得doc的第一个结点,即XML说明
QDomNode firstNode = doc.firstChild(); //若换为lastChild()指的是根元素
返回根元素
QDomElement docElem doc.documentElement(); 返回根节点的第一个子结点
n docElem.firstChild();//lastChild()获取最后一个节点输出的是book03 转到下一个兄弟结点
n n.nextSibling();//使用previousSibling访问前一个节点//创建XML文件 添加处理指令即XML说明
QDomProcessingInstruction instruction; instruction doc.createProcessingInstruction("xml", "version="1.0"encoding="UTF-8""); doc.appendChild(instruction);//添加在最后 添加元素
QDomElementbook=doc.createElement(QString("图书"));
//添加属性及其值 QDomAttr id doc.createAttribute(QString("编号")); id.setValue(QString("1")); book.setAttributeNode(id);
//文本及其文本值
QDomText text; text doc.createTextNode("Qt"));
Qt中SAX的使用
SAX(simple API for XML)为XML解析器提供了一个基于事件的标准接口。在Qt中支持SAX2不支持java中的SAX1。 QtXml模块中的事件处理类:
bool readFile(const QString &fileName);//读入XML文件 //readfile设置了文件的解析过程,Qt提供了一个简单的xml解析器QXmlSimpleReader,它是基于SAX,需要QXmlInputSource为其提供数据 protected:
//4个事件
startElement( &namespaceURI, &localName,0);">//获取元素名与属性 &qName,128);">QXmlAttributes &atts); endElement( //结束时该元素想进行的操作 &qName); characters( &ch); //获取元素中的文本 fatalError(QXmlParseException &exception); //错误处理器 //参数qName对应XML中的元素名,参数atts对应属性名,参数ch对应文本
Qt中XML流的使用 Qt中用了两个类来读取和写入XML文档(QXmlStreamWriter与QXmlStreamReader),前面讲到过在读取XML文档时是通过readNext()函数获取下一个记号,返回的是记号 类型,它由QXmlStreamReader::TokenType 定义,具体记号类型如图: //QXmlStreamReader解析文档 "../myXmlStream/my.xml");
QXmlStreamReader reader; 设置文件,这时会将流设置为初始状态
reader.setDevice(&file);
while (!reader.atEnd()) { 读取下一个记号,它返回记号的类型 QXmlStreamReader::TokenType type reader.readNext();//所有取值表17-6P417 下面便根据记号的类型来进行不同的输出
if (type ==StartDocument)
StartElement) {//元素的起始
(reader.attributes().hasAttribute("id"))//如果有属性为ID的元素
}
EndElement) //元素的截止
Characters && !reader.isWhitespace())//文本内容 }
//QXmlStreamWriter 创建文档
QFile file( "../myXmlStream/my2.xml"); QXmlStreamWriter stream(&file); //设置自动格式,会自动换行和添加缩进
stream.setAutoFormatting(true); //自动添加首行的XML说明<?xmlversion="1.0"encoding="UTF-8"?> stream.writeStartDocument();
//添加元素
stream.writeStartElement("book");//起始元素 stream.writeAttribute("href",0);">"http://qt.nokia.com/");
stream.writeTextElement("title",0);">"QtHome");//文本元素使用这个关闭前一个打开的元素 stream.writeEndElement();
stream.writeEndDocument();
XML在Qt中三种方法解析的简单例子 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |