Qt之生成XML(QXmlStreamWriter)
QXmlStreamWriter 类提供了一个使用简单的流 API,用于写入 XML,与之相对应的是 QXmlStreamReader(读取 XML)。
正如其相关类,它可以在 setDevice() 指定的 QIODevice 上操作。API 很简单明了:对于想要写的每个 XML 标签或事件,QXmlStreamWriter 都提供了一个专门的函数。
元素标签使用 writeStartElement() 打开,紧随其后的是 writeAttribute() 或 writeAttributes()、元素内容,然后使用 writeEndElement() 关闭标签。writeEmptyElement() 则可以写入空元素。
元素内容由字符、实体引用或嵌套元素组成,使用 writeCharacters() 写入,它还负责转义所有禁用的字符和字符序列、writeEntityReference() 或对 writeStartElement() 的后续调用。有一个很方便的函数 writeTextElement(),可用于元素仅写入文本信息。
QXmlStreamWriter 负责前缀命名空间,在编写元素或属性时,所有需要做的是指定 namespaceUri。假如必须遵守特定的前缀,可以通过调用 writeNamespace() 或者 writeDefaultNamespace() 手动声明名称空间,让 writer 强制使用它们。或者,可以绕过 QXmlStreamWriter 的命名空间支持,并使用重载的方法,而不是使用限定名称。命名空间 http://www.w3.org/XML/1998/namespace 是隐式的,并映射到前缀 xml。
QXmlStreamWriter 可以自动格式化生成的 XML 数据,通过在元素之间的空白部分添加换行符和缩进,使得 XML 数据更易读,并且对于大多数源代码管理系统更容易使用。可以使用 autoFormatting 属性(默认被禁用)打开此功能,并使用 autoFormattingIndent 属性(包含空格或制表符的数量,默认是 4)进行自定义。
还有其它函数 writeCDATA()、writeComment()、writeProcessingInstruction()、writeDTD(),XML streams 链由 writeCurrentToken() 支持。
默认情况下,QXmlStreamWriter 以 UTF-8 编码 XML,如果使用其它编码,调用 setCodec() 。
如果在写入底层设备时发生错误,hasError() 会返回 true,并忽略后续的写入。
?xml version="1.0" encoding="UTF-8" standalone="yes"? !--纯正开源之美,有趣、好玩、靠谱。。。-- ?xml-stylesheet type="text/css" href="style.css"? !DOCTYPE Blogs [ !ENTITY Copyright "Copyright 2016《Qt实战一二三》" !ELEMENT Blogs (Blog) !ELEMENT Blog (作者,主页,个人说明) !ELEMENT 作者 (#PCDATA) !ELEMENT 主页 (#PCDATA) !ELEMENT 个人说明 (#PCDATA) ] Blogs Version="1.0" Blog 作者 一去丶二三里 /作者 主页 http://blog.csdn.net/liang19890820 /主页 个人说明 青春不老,奋斗不止! /个人说明 Copyright; ![CDATA[ Qt分享 交流 368241647 /Qt分享 交流 ]] Empty/ /Blog /Blogs
第一行:XML 声明,它定义 XML 的版本(1.0)和所使用的编码(UTF-8)。
第二行:一个简单地注释( !--纯正开源之美,有趣、好玩、靠谱。。。-- )。
第三行:处理指令,用来指挥解析引擎如何解析XML文档内容。例如,在 XML 文档中可以使用 xml-stylesheet 指令,通知 XML 解析引擎,应用 CSS 文件显示 XML 文档内容。
第四行开始:表示 DTD,携带一个有关自身格式的描述。
根元素是 Blogs ,并包含属性 Version,其值为 “1.0”,文档中的所有 Blog 元素都被包含在 Blogs 中。 Blog 元素,有 3 个子元素: 作者 、 主页 、 个人说明 。后紧跟着实体引用、CDATA (不应由 XML 解析器进行解析的文本数据)以及一个空元素 Empty/ 。
源码如下:
QFile file(strFile); if (!file.open(QFile::WriteOnly | QFile::Text)) { // 只写模式打开文件 qDebug() QString("Cannot write file %1(%2).").arg(strFile).arg(file.errorString()); return; QXmlStreamWriter writer( file); // writer.setCodec("GBK"); // XML 编码 writer.setAutoFormatting(true); // 自动格式化 writer.writeStartDocument("1.0", true); // 开始文档(XML 声明) writer.writeComment(QString::fromLocal8Bit("纯正开源之美,有趣、好玩、靠谱。。。")); // 注释 writer.writeProcessingInstruction("xml-stylesheet type=\"text/css\" href=\"style.css\""); // 处理指令 // DTD writer.writeDTD(QString::fromLocal8Bit(" !DOCTYPE Blogs [ !ENTITY Copyright \"Copyright 2016《Qt实战一二三》\" !ELEMENT Blogs (Blog) !ELEMENT Blog (作者,主页,个人说明) !ELEMENT 作者 (#PCDATA) !ELEMENT 主页 (#PCDATA) !ELEMENT 个人说明 (#PCDATA) ] ")); writer.writeStartElement("Blogs"); // 开始根元素 Blogs writer.writeAttribute("Version", "1.0"); // 属性 writer.writeStartElement("Blog"); // 开始子元素 Blog writer.writeTextElement(QString::fromLocal8Bit("作者"), QString::fromLocal8Bit("一去丶二三里")); writer.writeTextElement(QString::fromLocal8Bit("主页"), "http://blog.csdn.net/liang19890820"); writer.writeTextElement(QString::fromLocal8Bit("个人说明"), QString::fromLocal8Bit("青春不老,奋斗不止!")); writer.writeEntityReference("Copyright"); writer.writeCDATA(QString::fromLocal8Bit(" Qt分享 交流 368241647 /Qt分享 交流 ")); writer.writeCharacters(" "); writer.writeEmptyElement(QString::fromLocal8Bit("Empty")); // 空元素 writer.writeEndElement(); // 结束子元素 /Blog writer.writeEndElement(); // 结束根元素 /Blogs writer.writeEndDocument(); // 结束文档 file.close(); // 关闭文件 }
注意:使用 writeStartElement() 打开元素标签后,要有相应的 writeEndElement() 来关闭。
Qt 利用XML文档,写一个程序集合 一 接到领导需求安排,说公司未来的硬件设备会越来越多,与每个设备对应的设备检测和设置程序也会增多。导致软甲太多,不好掌控。所以希望做一个完整的软件,但是呢,每个子程序还得独立,应为每个用户购买的设备不是一样的。
浅谈XML 1.什么是XML? 2.xml定义? xml是 可扩展的标记性语言 3.xml和html的区别? XML 与 HTML 的主要差异?(前者传输数据,后者显示数据) 4.xml的用途? 数据描述、存储数据 和 数据共享 5.xml的约束 W3C组织它们早期指定的xml的约束技术为DTD技术,后期升级为Schema约束。
SAX(Simple API for XML)是用于 XML 解析器的基于事件的标准接口。XML 类的设计遵循 SAX2 Java interface,名称适合 Qt 的命名约定。对于任何使用 SAX2 的人来说,使用 Qt XML 类应该非常容易。 SAX 不同于 DOM 解析,它逐行扫描文档,一边扫描一边解析。由于应用程序只是在读取数据时检查数据,因此不需要将数
相关文章
- Qt-Qt在使用QSqlQuery时提示 QSqlError("", "Unable to fetch row", "No query")?
- QT-Qt设置背景图片
- s3c2410上搭建QT/Embedded4.8.5开发环境(二)--安装arm平台qt库qt-everywhere-opensource-src-4.8.5
- golang encoding/xml 解析多个根节点的XML文件
- Qt编写安防视频监控系统12-异形布局
- Qt开源作品43-超级图形字体
- Qt容器类怎么使用
- Qt DOM创建和操作XML文档
- Qt 重载QGraphicsItem的type()函数
- Qt xml文件常用的操作(读写,增删改查)
- Qt 枚举变量,Q_ENUM,Q_FLAG,Q_NAMESPACE,Q_ENUM_NS,Q_FLAG_NS以及其他
- Qt 关于QT_BEGIN_NAMESPACE宏的作用
- qt操作json(QT 教程)
- Qt 之 数字钟
- XML——读取文件夹下所有的Xml文件,并修改属性,保留上次打开文件的位置
- 1、QT基础——Qt概述
- QT之窗体移动实现
- qt 传输图片
- python XML文件解析:用xml.dom.minidom来解析xml文件
- java载入XML文件并解析xml