Qt模块化笔记之core——认识XML可扩展标记语言

本系列将涉及的类有:

QXmlStreamAttribute

体现XML一个属性

QXmlStreamAttributes

是QXmlStreamAttribute的vector容器,属性性集

QXmlStreamEntityDeclaration

DTD实体声明

QXmlStreamEntityResolver

为QXmlStreamReader准备的实体解析器

QXmlStreamNamespaceDeclaration

XML命名空间声明

QXmlStreamNotationDeclaration

DTD记号声明

QXmlStreamReader

读XML(重要,可串起所有类

QXmlStreamWriter

写XML

以QXmlStreamReader和QXmlStreamWriter为中心,介绍它们的使用。

除这些外,Qt还提供了自己的解析引擎(以QXmlSimpleReader为中心),然而文档说QXmlStreamReader is a faster and more convenient replacement for Qt's own SAX parser (see QXmlSimpleReader)(QXmlStreamReader比Qt自己的引擎更快更方便,是更好的替代品).故而,讨论以上类更明智些。而且它们的关系更紧凑……

——————————————————————————————————————————————————————————————

在您学习这些类之前,必须对XML有相当的了解,才能运用自如,最好把这里:XML教程 的教程的基础部分看完。

下面介绍它,即使你不看上面教程,也许也能很快了解它的。

先认识下xml:

XML 指可扩展标记语言(EXtensible Markup Language)
XML 的设计宗旨是传输数据,而非显示数据

XML可用于当作数据库一样保存数数据,也可以像QSettings那样用于保存程序的大小宽高等,还可以在网络中传输。

一段极简单XML代码:

<note>
	<to>张三</to>
	<from>张三老婆</from>
	<body>别忘吃饭!</body>
</note>

上面代码的所有英文及中文都是自己定义的,表示一个便签note,是张三老婆留给他的,提醒他不要忘记吃饭……

XML语言的标签由大于号与小于号组成,格式为:  <标签名></标签名>。带/的表示关闭标签,XML很严格,一定是需要它的,不然就解析出错。这些标签不断嵌套就可组成复杂的文档了。可以观察这个比较复杂的XML:点击打开链接,内部<!--注释-->为注释内容。

(到此,如果你看得头晕了,先跳过下面的内容,看本系列的其它篇吧……)

————————————————————————————————————————————————————————————————

接下来,看一篇五脏俱全的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--这是一个便签-->
<!DOCTYPE Notes [
	<!ELEMENT note (date,message)>
	<!ELEMENT date (#PCDATA)>
	<!ELEMENT message (#PCDATA)>
]>
<Notes>
	<note>
		<date>2月1日</date>
		<message>别忘了参加party</message>
	</note>
	<note>
		<date>2月14日</date>
		<message>今天情人节啊</message>
	</note>
	<note>
		<date>2月18日</date>
		<message>今天自己煮饭吧</message>
	</note>
</Notes>

第一行解释(来自点击打开链接):version="1.0" ,它是表示版本为1.0;
standalone 定义了外部定义的 DTD (上面第三行开始的几行,具体了解DTD见点击打开链接)文件的存在性. standalone element 有效值是 yes 和 no. 如下是一个例子: 

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE s1 PUBLIC "http://www.ibm.com/example.dtd" "example.dtd">
<s1>.........</s1>
值 no 表示这个 XML 文档不是独立的而是依赖于外部所定义的一个 DTD. 值 yes 表示这个 XML 文档是自包含的(self-contained).

第二行是注释语句。

第三行及往下四行是DTD文档声明,一般XML文档中很少见它。

其它就是主要内容了。<Notes>是根元素,必属包含。其它元素都是父子的关系

Qt中头部与DTD部分,对应的名称与所表示部分如下:

StartDocument()——<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

documentVersion()——version="1.0"

documentEncoding()——encoding="UTF-8"

StandaloneDocument()——standalone="yes"

DTD

notationDeclarations()——<!ELEMENT note (date,message)>

entityDeclarations()——<!ELEMENT date (#PCDATA)><!ELEMENT message (#PCDATA)>

dtdName——Notes,<!DOCTYPE 后那个

dtdPublicId()和dtdSystemId()——注来自点此查看区别

注:[systemId: 外部资源(多半是DTD)的URI,比如本地文件file:///usr/share/dtd/somefile.dtd或者网络某个地址的文件http://www.w3.org/somefile.dtd; 
publicId: systemId已经可以表示任何位置的外部DTD资源了,但是它是直接指向相应的资源,publicId的作用在于其间接性。publicID就相当于一个名字,这个名字代表了一个外部资源。比如,我们规定”W3C HTML 4.01″这个字符串对应”http://www.w3.org/somedir/somefile.dtd”这个资源。那么,publicID=”W3C HTML 4.01″ 和 systemID=”http://www.w3.org/somedir/somefile.dtd”是一样的,二者都引用了http://www.w3.org/somedir/somefile.dtd作为该文档的外部DTD。 ]

————————————————————————————————————————————————————————————

XML还有属性这一说法。但由于属性会引起一些问题,W3C建议“请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。

除XML的基础外,它的命名空间部分也需要认识下:点击打开链接 

以下是一篇比较常见的格式文:

<?xml version="1.0" encoding="UTF-8"?>
<Notes>
	<note>
		<date>2月1日</date>
		<message>别忘了参加party</message>
	</note>
	<note>
		<date>2月14日</date>
		<message>今天情人节啊</message>
	</note>
	<note>
		<date>2月18日</date>
		<message>今天自己煮饭吧</message>
	</note>
</Notes>

以下是为接下来内容准备的,带命名空间的格式文(xmlns即是XML Namespace,是个XML自带的属性。用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称(代码中http:://……)。):

<?xml version="1.0" encoding="UTF-8"?>
<tables>
 <table xmlns:h="http://www.w3.org/TR/html4/">
   <tr>
   <td>Apples</td>
   <td>Bananas</td>
   </tr>
 </table>
 <table xmlns:f="http://www.w3school.com.cn/furniture">
   <name>African Coffee Table</name>
   <width>80</width>
   <length>120</length>
 </table>
</tables>

——————————————————————————————————————————————————————————

分辨URI与URL

统一资源标识符(Uniform Resource Identifier (URI))
统一资源标识符是一串可以标识因特网资源的字符。最常用的 URI 是用来标示因特网域名地址的统一资源定位器(URL)。


——————————————————————————————————————————————————————————

更多参考:

1,XML学习笔记之文档类型定义(DTD) 和实体(ENTITY)

2,XML与DTD (里面有一些记号声明的说明),除本篇外,还有几篇,算是作者的心得吧


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值