1.什么是XML
- XML 指可扩展标记语言。
- XML 是一种很像HTML的标记语言。
- XML 的设计宗旨是传输数据,而不是显示数据。
- XML 标签没有被预定义。您需要自行定义标签。
1.2XML的作用
- 企业级:将之前的开发效率提升了10倍。
- 效率提升:框架。
- 框架:设计模式+反射+配置文件。
- 配置文件:XML文件。
- XML文件:dtd约束+解析+建模
1.3XML的格式:
- 有且只有一个根元素
- XML标签大小写正确的区分
- 正确使用结束标签
- 正确嵌套标签
- 使用了合法的标签
- 定义有效的属性
代码:
<?xml version="1.0" encoding="UTF-8"?> <rootElement> <childElement1>value1</childElement1> <childElement2>value2</childElement2> <childElement3>value3</childElement3> </rootElement> <book category="Children"> <title lang="en">Harry Potter</title> <author>J.K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
2.元素定义
2.1元素的特点:
- 元素必须有开始和结束标记,即使是空元素也要用自闭合标记表示。
- 元素不能交叉定义。
- 元素名是区分大小写的,常见的命名规则是使用驼峰命名法。
- 属性名是区分大小写的,属性值也应该使用引号。
- 元素的文本内容可以包含各种字符,包括换行、制表等,但需要进行转义。
2.2元素的声明:
需要在XML声明加入了DTD
<!DOCTYPE root []>
2.3元素的分类:
- 空元素 <!ELEMENT element-name EMPTY>
- 文本元素 <!ELEMENT element-name (#PCDATA)>
- 混合元素 <!ELEMENT element-name (e1,e2)>
2.4元素的限制:
次数: 0或1 用 ” ? “代替
0~N:0次到无数次 用 ” * “ 代替
1~N:至少一次 或无数次 用 ” + “ 代替
| : 或
代码如下:
<?xml version="1.0" encoding="UTF-8"?> <!-- 元素的约束 --> <!DOCTYPE persons [ <!-- 根节点下有的节点 --> <!ELEMENT persons (person*)> <!-- 节点下的元素 --> <!ELEMENT person (name,age,contact,br?)> <!-- 文本元素 --> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!-- 元素中可有的子元素 --> <!ELEMENT contact (phone|email)> <!-- 文本元素 --> <!ELEMENT phone (#PCDATA)> <!ELEMENT email (#PCDATA)> <!-- 空元素 --> <!ELEMENT br EMPTY> ]> <persons> <person> <name>张小明</name> <age>10</age> <contact> <phone>1234567</phone> </contact> <br/> </person> <person> <name>张大明</name> <age>35</age> <contact> <email>123@qq.com</email> </contact> </person> </persons>
3.属性定义
语法:
<!ATTLIST element-name att_name type desc>
注意:属性的约束也是需要声明的,所有也是写在 <!DOCTYPE root []> 里面
3.1性类型 type
ID
(男|女)
CDATA
IDREF(reference)
2.属性描述
#REQUIRED 必填
#IMPLIED 非必填
默认值,只有type为(男|女)类型或者单选时 desc才可以用默认值方式
示例如下:
<?xml version="1.0" encoding="UTF-8"?> <!-- 元素的约束 --> <!DOCTYPE persons [ <!-- 根节点下有的节点 --> <!ELEMENT persons (person*)> <!-- 节点下的元素 --> <!ELEMENT person (name,age,contact,br?)> <!-- 文本元素 --> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!-- 元素中可有的子元素 --> <!ELEMENT contact (phone|email)> <!-- 文本元素 --> <!ELEMENT phone (#PCDATA)> <!ELEMENT email (#PCDATA)> <!-- 空元素 --> <!ELEMENT br EMPTY> <!-- 属性的约束 --> <!-- 给person设置属性 --> <!ATTLIST person pid ID #REQUIRED sex (男|女) "男" qq CDATA #IMPLIED parent IDREF #IMPLIED > ]> <persons> <person pid="p1" sex="男" qq="aaa" parent="p2"> <name>张小明</name> <age>10</age> <contact> <phone>1234567</phone> </contact> <br/> </person> <person pid="p2"> <name>张大明</name> <age>35</age> <contact> <email>123@qq.com</email> </contact> </person>