学习笔记|XML 与 JSON
本文最后更新于:3 years ago
1.XML
可扩展标记语言(Extensible Markup Language)。
1 |
|
2.常见应用
- 用于 client / Server 之间的数据传输。使用 XML 格式描述,具有可读性和可维护性。
- 保存有关系的数据。
- 作为软件的配置文件。如 Java EE 中 struts、spring 的配置文件;Android 中布局文件、menifest文件、清单文件。
3.文档声明
1 |
|
encoding
:说明文档所使用的字符编码。默认为 UTF-8。standlone
:说明文档是否独立,是否依赖其他文档。
4.XML 元素
开始标签、闭合标签
- 包含标签主体:
<china>民主和谐</china>
- 不包含标签主体:
<china/>
- 包含标签主体:
一个 XML 文件中只能有一个根标签。
5.规范
用于传输的 XML 文件没有空格、回车,目的节省传输流量。
XML 元素可包含字母、数字及其他一些可见字符。
区分大小写。
不能数字和下划线开头。
不能以 xml、Xml、XML 开头。
不能包含空格。
标签中不能出现冒号。
6.属性
一个元素有多个属性,每个属性有自己的 key value。
属性值用单引号或双引号引起来。
属性命名规范与元素命名规范一致。
元素的属性不能重复。
1 |
|
1 |
|
7.注释
1 |
|
快捷键:ctrl
+ /
8.CDATA
CDATA section 中的文本不会被解析器解析。
1 |
|
9.特殊字符
以下特殊字符,若需在元素主体中显示,需进行转义。
特殊字符 | 替代字符 |
---|---|
& | & |
< | < |
> | > |
" | " |
’ | &apos |
1 |
|
显示为:<data>small<big<data>
10.约束
- XML 文档是用户自定义的标签,为了保障软件程正确地获取内容。
- 需要编写 XML 约束文档来约束 XML 文档的书写规范。
约束文档
- XML 中允许出现的元素名称、属性、元素出现顺序。
- 常见的约束技术有:DTD、Schema。
11.DTD
11.1 引用 DTD 文档
DTD(Document Type Definition)文档类型定义。
作用:约束 XML 文件的书写规范。
PS:DTD 可以也写在单独的文件中,扩展名是 dtd,且必须使用 UTF-8 编码(XML文档内部编写 DTD,没有编码要求)。
(1)外部 DTD 在本地时
引用格式如下:
1 |
|
(2)外部 DTD 在公共网络上
引用格式如下:
1 |
|
(3)XML 文档内部编写 DTD
1 |
|
11.2 定义元素
看懂即可。
语法:<!ENTITY 元素名称 使用规则>
使用规则:
- (#PCDATA):元素标签内的主体内容只能是普通文本。
- PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
- 被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &、< 以及 > 实体来分别替换它们。
1 |
|
- EMPTY:元素标签内的主体只能是空文本。
1 |
|
- ANY:元素标签内的主体为任意内容。
11.3 定义子元素及描述关系
- 逗号分隔子元素
这些子元素必须按照相同的顺序出现在文档中。在一个完整的声明中,子元素也必须被声明,同时子元素也可拥有子元素。
1 |
|
- |分隔子元素
多个元素中,任选其一。
1 |
|
上面的例子声明了:“note” 元素必须包含 “to” 元素、“from” 元素、“header” 元素,以及 “message” 元素或 “body” 元素。
- 用 + * ? 来表示元素出现次数
- + 表示至少出现一次。
- * 表示可有可无。
- ? 表示 0 次或 1 次。
- 无 + * ? 表示必须出现一次
11.4 定义属性
语法:<!ATTLIST 元素名称 属性名称 属性值类型 设置说明>
属性值类型:
- CDATA:属性的取值为普通的文本字符串
- (a|b|c):取值其中任选其一。
- ID:属性取值不能重复。
设置说明:
#REQUIRED
:该属性必须出现。#IMPLIED
:该属性可有可无。#FIXED
:该属性的取值为固定值。
1 |
|
11.5 定义引用实体
语法:<!ENTITY 实体名称 实体内容>
1 |
|
12.Schema
Schema 本身就是 XML 文档。扩展名:.xsd。
支持 namespace,一个 namespace 对应一个约束文档。
缺点:不能想 DTD 定义实体。
1 |
|
13.XML 解析
DOM 解析和 SAX 解析,jdk 都提供解析的接口。
- DOM 解析
在内存中构建一个树形结构。
**优点:**将整个 XML 文件在内存中构建树状结构,增删改操作便利。
**缺点:**如果解析的文件过大,一次性在内存中分配一个树状结构,会内存溢出。
**解析思路:**DocumentFactory --> DocumentBuilder --> Document --> 通过节点获取 NodeList->具体的 Node。
- SAX 解析
边读边解析。读到不同的标签,进行不同的处理。
**优点:**不会造成内存溢出。
**缺点:**不能修改 xml 文件。
SAXParserFactory --> SAXParser --> SAXReader --> 不同的 Handler
- pull 解析
需要导入 jar 包。
14.json
JavaScript 对象表示法。一种简单的数据格式,比 XML 更轻巧。
14.1 规则
名称:值。class:2
并列数据使用 , 表示。class:2,grade:1
一个集合使用 {} 表示。{class:2,grade:1}
数据集合数组用 [] 表示。
1 |
|
- 元素类型:string、number、object、array、true、false、null
14.2解析
jar 包:org.json.JSONObject