这是我参与「第四届青训营 」笔记创作活动的第6天
XML
1、概念:可扩展标记语言
xml是W3C推出的数据传输格式
标记:标签组成的语言
可扩展:标签都是自定义的。
2、功能:
- 配置文件:config.xml
- 在网络中传输
- 存储数据,充当小型数据库
- 最主要的功能就是数据传输(数据传输就是将数据由一个服务器给到另一个服务器,或者由一个网站给到另一个网站,将数据进行了两者之间的一种交换)
- xml主要具体是在规范数据格式,是数据具有结构性,易读易处理
- XML 是不作为的。XML 仅仅是纯文本,XML 没什么特别的。它仅仅是纯文本而已。有能力处理纯文本的软件都可以处理 XML。不过,能够读懂 XML 的应用程序可以有针对性地处理 XML 的标签。标签的功能性意义依赖于应用程序的特性。
3、xml与html的区别:
- xml标签都是自定义,但是在写标签名的时候一定要有含义,html标签是预定义
- xml的语法严格,html语法松散(很难写错),xml必须是成对标签
- xml是传输和存储数据的,html是展示数据的
4、语法:
-
基本语法:
- xml文档后缀名.xml
- xml第一行必须定义为文档声明
- xml文档中有且仅有一个根标签/结点,根节点就是其他所有节点的父级节点
- 属性值必需使用引号(单双都可)括起来
- 标签必须正确关闭
- xml标签名区分大小写
- 标签不能交叉
- 特殊字符如< >这些要使用实体 <;表示小于号,不然和标签无法区分
5、组成部分:
-
文档声明:不强制要求,可有可无,但是建议写
-
格式: 尖括号和?,?和xml之间都不能有空格
-
属性列表:
-
version:版本号,必须的属性
-
encoding:编码方式,告知解析引擎当前文档使用的字符集,默认值
-
standalone(了解):是否独立
取值:yes:不依赖其他文件 no:依赖其他文件
-
-
2.标签:标签是自定义的
规则:
-
名称可以包含字母,数字以及其他字符
-
名称不能以数字或者标点符号开始
-
名称不能以字母xml(或者xml,XML,等待)开始
-
名称不能包含空格
-
最佳命名习惯
使名称具有描述性。使用下划线的名称也很不错。
名称应当比较简短,比如:<book_title>,而不是:<the_title_of_the_book>。
避免 "-" 字符。如果您按照这样的方式进行命名:"first-name",一些软件会认为你需要提取第一个单词。
避免 "." 字符。如果您按照这样的方式进行命名:"first.name",一些软件会认为 "name" 是对象 "first" 的属性。
避免 ":" 字符。冒号会被转换为命名空间来使用(稍后介绍)。
XML 文档经常有一个对应的数据库,其中的字段会对应 XML 文档中的元素。有一个实用的经验,即使用数据库的名称规则来命名 XML 文档中的元素。
非英语的字母比如 éòá 也是合法的 XML 元素名,不过需要留意当软件开发商不支持这些字符时可能出现的问题。
3.属性(引号内部的内容,属性值须加引号):
一个标签可以有多个属性,属性的值必须用引号引起来
命名规则:数字字母下划线,数字不能开头
属性就是标签自身的一些额外信息
id属性值唯一
避免 XML 属性?
因使用属性而引起的一些问题:
- 属性无法包含多重的值(元素可以)
- 属性无法描述树结构(元素可以)
- 属性不易扩展(为未来的变化)
- 属性难以阅读和维护
请尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息。
4.文本:
CDATA区:在该区域的数据或被原样展示
格式:
5.元素:
XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。
<bookstore>
<book category="CHILDREN">
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
在上例中, 和 都拥有元素内容,因为它们包含了其他元素。 只有文本内容,因为它仅包含文本。
在上例中,只有 元素拥有属性 (category="CHILDREN")。
7、XML 元素 vs. 属性
例子:
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
在第一个例子中,sex 是一个属性。在第二个例子中,sex 则是一个子元素。两个例子均可提供相同的信息。
没有什么规矩可以告诉我们什么时候该使用属性,而什么时候该使用子元素。我的经验是在 HTML 中,属性用起来很便利,但是在 XML 中,应该尽量避免使用属性。如果信息感觉起来很像数据,那么请使用子元素吧。
6、约束:规定xml文档的书写规则
作为框架的使用者(程序员):
- 能够在xml中引入约束文档
- 能够简单读懂约束文档
分类:
- DTD:一种简单的约束技术(无法约束标签内部具体的定义内容,只能限制一个固定框架)
- Schema:一种复杂的约束技术
DTD:
引入dtd文档到xml文档中
- 内部dtd:将约束规则定义在xml文档中
- 外部dtd:将约束的规则定义在外部的dtd文件中
Schema:
引入:
-
填写xml文档的根元素
-
引入xml前缀,xmlns:xsi="www.itcast.cn/xml student.xsd"
-
映入xsd文件命名空间,xsi:schemaLocation="www.itcast.cn/xml student.xsd"
-
为每一个xsd约束声明一个前缀,作为标识 xmls="www.itcast.cn/xml"
<student xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.itcast.cn/xml" xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"></student>
7、解析:操作xml文档,将文档中的数据读取到内存中
操作xml文档:
- 解析(读取):将文档中的数据读取到内存中
- 写入:将内存中的数据保存到xml文档中,持久化的存储
解析xml的方式:
1、DOM思想:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
- 优点:操作方便,可以对文档进行CRUD(增删改查)的所有操作
- 缺点:消耗内存
2、SAX思想:逐行读取,基于事件驱动的
- 优点:不占内存,因为每次在内测中只加载一行
- 缺点:只能读取,不能增删改
注:在服务器中一般使用DOM思想,在移动端一般使用SAX思想
3、xml常见的解析器:
- JAXP:sun公司提供的解析器,支持dom和sax两种思想(性能低,一般使用,了解即可)
- DOM4J:非常优秀的解析器
- jsoup:
- PULL:Android操作系统内置的解析器,sax方式的
8、在 XML 中,有 5 个预定义的实体引用:
| < | < | 小于 |
|---|---|---|
| 大于 | ||
| & | & | 和号 |
| ' | ' | 单引号 |
| " | " | 引号 |
注释: 在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。