1、XML
①什么是 XML?
XML 指可扩展标记语言(EXtensible Markup Language)
XML被设计用来传输和存储数据。
XML以标签的形式存储数据。
XML可以用来存储一对多的数据,用来当做配置文件存储数据。
XML文件组成部分:文档声明、元素、元素的属性、注释、CDATA区、特殊字符、处理指令(PI:Processing Instruction)
②拥有正确语法的XML被称为“形式良好”的XML。
通过某个DTD进行了验证的XML是“合法”的XML。
W3C 支持一种基于XML的DTD代替者XML Schema。
一个"形式良好"的XML文档会遵循以下规则
*XML文档必须有根元素
*XML文档必须有关闭标签
*XML标签对大小写敏感
*XML元素必须被正确嵌套
*XML属性必须加引号
③非法的XML字符必须被替换为实体引用(entity reference)
< | < | 小于 |
> | > | 大于 |
& | & | 与 |
&apos | ' | 单引号 |
" | " | 双引号 |
PS:严格上讲,在 XML 中仅有字符 "<"和"&" 是非法的。
如果文本中需要大量用到"<"和"&" ,那么可以将文本定义为一个CDATA区段,因为CDATA 内部的所有东西都会被解析器忽略。
CDATA 区段开始于 "<![CDATA[",结束于 "]]>"。(CDATA区段内不能包含字符串"]]>")
2、XML约束DTD
DTD(文档类型定义)的作用是定义 XML 文档的合法构建模块。
①DTD引入声明格式:
包含在 XML 源文件中声明:<!DOCTYPE 根元素 [元素声明]>
作为外部引用文档声明:<!DOCTYPE 根元素 SYSTEM "文件名">
②在DTD文档中使用ELEMENT关键字来声明一个XML元素:<!ELEMENT 元素名称 使用规则>
使用规则:
(#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)
EMPTY:用于指示元素的主体为空。比如<br/>
ANY:用于指示元素的主体内容为任意类型。
(子元素):指示元素中包含的子元素
如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。
<!ELEMENT book (name,author,price)>
如果子元素用"|"分开,说明任选其一。
<!ELEMENT book (name|author|price)>
用+、*、?来表示元素出现的次数
不加+*?:表示必须出现一次
+:表示至少出现一次或多次
*:表示零次、一次或多次
?:表示零次或一次
③在 DTD 中,属性通过ATTLIST来进行声明:<!ATTLIST 元素名称 属性名称 属性类型 值>
属性类型 | 描述 |
CDATA | 普通的文本字符串 |
(红色|黄色|绿色) | 枚举 |
ID | 唯一的id |
NOTATION | 符号的名称 |
xml: | 预定义的XML值 |
值 | 描述 |
直接值 | 属性的默认值 |
#REQUIRED | 属性值必须出现 |
#IMPLIED | 属性值可有可无 |
#FIXED value | 属性的取值为一个固定值。 |
3、XML约束Schema
XML Schema 是基于 XML 的 DTD 替代者。
Schema约束自身就是一个XML文件,但它的扩展名通常为.xsd
一个XML Schema文档通常称之为模式文档(约束文档),遵循这个文档书写的xml文件称之为实例文档。
XML Schema对名称空间支持得非常好
理解:
名称空间: 相当于package
约束文档: 编写好的Person类
实例文档: 通过Person类创建对象
约束文档 <?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" //标准的名称空间 targetNamespace="http://www.example.org/email"> //将该schema文档绑定到http://www.example.org/email名称空间 <element name="email"> <complexType> <sequence> <element name="from" type="string"/> <element name="to" type="string"/> <element name="subject" type="string"/> <element name="body" type="string" /> </sequence> </complexType> </element> </schema>
|
实例文档 <?xml version="1.0" encoding="UTF-8"?> <p:email xmlns:p="http://www.example.org/email" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.org/email XMLSchema.xsd "> <from>赵敏</from> <to>张无忌</to> <subject>提醒</subject> <body>看电影</body> </p:email>
|
4、XML的解析
①Dom解析:直接把整个xml文件加载进内存,如果xml过大,可能内存溢出
②SAX解析:一次一个节点(节点: 标签、属性、文本、甚至是换行都称之为节点)的解析,如果要获取指定节点,比较耗时。但是不会出现内存溢出的情况
③使用Dom4j来解析xml文件
<?xml version="1.0" encoding="UTF-8"?> <公司> <腾讯 yingyee="2000亿"> <leader age="25岁"> <name>老化疼</name> </leader> </腾讯> <百度 yingyee="1300亿"> <leader age="35岁"> <name>李彦宏</name> </leader> </百度> <阿里 yingyee="1200亿"> <leader age="45岁"> <name>马云</name> </leader> </阿里> <华为 yingyee="1000亿"> <leader age="65岁"> <name>任性</name> </leader> </华为> </公司> |