目录
一、xml概述
1.什么是xml
2.W3C组织
3.XML的作用
4.XML与HTML比较
5.XML和properties(属性文件)比较
二、XML语法概述
1.文档展示
2.XML文档的组成部分
3.xml文档声明
3.1 什么是xml文档声明
3.2 xml文档声明结构
4.xml元素
4.1 xml元素的格式1
4.2 XML元素的格式2
4.3 xml文档的根元素
4.4 元素中的空白
4.5 元素命名规范
4.6 元素属性
4.7 注释
4.8 转义字符和CDATA区
4.9 CDATA 区(CDATA段)
三、xml约束
1.XML约束概述
1.1 什么是xml约束
1.2 XML文档约束的类型
2.DTD
2.1 什么是DTD
2.2 DTD展示
3. Schema
3.1 Schema概述
3.2 为什么要用Schema
3.3 Schema的文档结构
3.4 Schema的数据类型
1. 简单类型
2.复杂类型(通过complexType定义)
4.xml解析
1.操作XML文档概述
1.1 如何操作xml文档
1.2 xml解析技术
2.DOM4J
2.1 DOM4J是什么
2.2 DOM4J中的类结构
2.3 DOM4J获取Document对象
2.4 DOM4J保存Document对象
2.5 DOM4J创建Document对象
3.Document操作
3.1 遍历students.xml
4.XPath
4.1 什么是XPath
4.2 DOM4J对XPath的支持
一、xml概述
1.什么是xml
2.W3C组织
3.XML的作用
4.XML与HTML比较
HTML的元素都是固定的,而XML可以自定义元素;
HTML用浏览器来解析执行, XML的解析器通常需要自己来写(因为元素是自定义的);
HTML只能用来表示网页,而XML可以做的事情很多。
5.XML和properties(属性文件)比较
- 1. 属性文件只能存储平面信息,而XML可以存储结构化信息;
- 解析属性文件只需要使用Properties类就可以了,而解析XML文档是很复杂的。
二、XML语法概述
- 元素!!!
- 文档声明!!!
1.文档展示
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<students>
<student number="1001">
<name>zhangSan</name>
<age>23</age>
<sex>male</sex>
</student>
<student number="1002">
<name>liSi</name>
<age>32</age>
<sex>female</sex>
</student>
<student number="1003">
<name>wangWu</name>
<age>55</age>
<sex>male</sex>
</student>
</students>

2.XML文档的组成部分
- XML文档声明;
- XML处理指令;
- XML元素;
- XML特殊字符和CDATA区; [![CADATA <<<<>>>>>> ]]
- XML注释。<!--- -->
3.xml文档声明
3.1 什么是xml文档声明
3.2 xml文档声明结构
- 没有xml文档声明的xml文档,不是格式良好的xml文档;
- xml文档声明必须从xml文档的1行1列开始。
4.xml元素
4.1 xml元素的格式1
4.2 XML元素的格式2
- 1. xml元素可以包含子元素或文本数据。
- 2. xml元素可以嵌套,但必须是合法嵌套。
4.3 xml文档的根元素
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<students>
<student number="1001">
<name>zhangSan</name>
<age>23</age>
<sex>male</sex>
</student>
<student number="1002">
<name>liSi</name>
<age>32</age>
<sex>female</sex>
</student>
</students>
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<student number="1001">
<name>zhangSan</name>
<age>23</age>
<sex>male</sex>
</student>
<student number="1002">
<name>liSi</name>
<age>32</age>
<sex>female</sex>
</student>
4.4 元素中的空白
<a><b>hello</b></a>
<a>
<b>
hello
</b>
</a>
a.xml中,元素只有一个子元素,即元素。元素只有一个文本数据,即hello。
b.xml中,元素中第一部分为换行缩进,第二部分为元素,第三部分为换行。b元素的文本数据为换行、缩进、hello、换行、缩进。
其中换行和缩进都是空白,这些空白是为了增强xml文档的可读性。但xml解析器可能会因为空白出现错误的解读,这说明在将来编写解析xml程序时,一定要小心空白。
4.5 元素命名规范
- 区分大小写:和是两个元素;
- 不能以数字开头:<1a>都是错误的;
- 最好不要以xml开头:
- 不能包含空格;
4.6 元素属性
- 属性由属性名与属性值构成,中间用等号连接;
- 属性值必须使用引号括起来,单引或双引;
- 定义属性必须遵循与标签名相同的命名规范;
- 属性必须定义在元素的开始标签中;
- 一个元素中不能包含相同的属性名;
4.7 注释
- 注释以<!--开头, 以--> 结束;
- 注释中不能包含--;
4.8 转义字符和CDATA区

4.9 CDATA 区(CDATA段)
<a><![CDATA[<a>]]></a>
三、xml约束
1.XML约束概述
1.1 什么是xml约束
<frame title="test xml" layout="java.awt.BorderLayout">
<bgcolor>
<red>200</red>
<green>0</green>
<blue>0</blue>
</bgcolor>
<size>
<width>300</width>
<heigth>200</heigth>
</size>
<content>
<label>
<text>hello xml</text>
<label>
</content>
</frame>
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<students>
<student number="1001">
<name>zhangSan</name>
<age>23</age>
<sex>male</sex>
</student>
<student number="1002">
<name>liSi</name>
<age>32</age>
<sex>female</sex>
</student>
<student number="1003">
<name>wangWu</name>
<age>55</age>
<sex>male</sex>
</student>
</students>
1.2 XML文档约束的类型
- dtd:dtd是平面式文档,dtd文件不是xml文档,通常扩展名为“.dtd”。它是最早的xml约束;
- schema:schema本身也是xml文档,它比dtd要更加强大,通常扩展名为“.xsd”。它是新的xml文档约束,用来替代dtd。
2.DTD
2.1 什么是DTD
2.2 DTD展示
<!ELEMENT students (student+)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
- students元素中可以包含1~n个student元素;
- student元素中必须包含name、age、sex元素,而且顺序也是固定的;
- ame元素内容为文本,即字符串;
- age元素内容为文本;
- sex元素内容为文本。
3. Schema
3.1 Schema概述
3.2 为什么要用Schema
- DTD 的局限性
DTD不遵守XML语法(写XML文档实例时候用一种语法,写DTD的时候用另外一种语法)
DTD数据类型有限(与数据库数据类型不一致)
DTD不可扩展
DTD不支持命名空间(命名冲突)
- Schema的新特性
Schema基于XML语法
Schema可以用能处理XML文档的工具处理
Schema大大扩充了数据类型,可以自定义数据类型
Schema支持元素的继承—Object-Oriented’
Schema支持属性组
3.3 Schema的文档结构

3.4 Schema的数据类型
1. 简单类型



2.复杂类型(通过complexType定义)
4.xml解析
1.操作XML文档概述
1.1 如何操作xml文档
- C:Create;
- R:Retrieve;
- U:Update;
- D:Delete
1.2 xml解析技术
2.DOM4J
2.1 DOM4J是什么
2.2 DOM4J中的类结构

2.3 DOM4J获取Document对象
SAXReader reader = new SAXReader();
// reader.setValidation(true);
Document doc = reader.read("src/students.xml");
2.4 DOM4J保存Document对象
doc.addDocType("students", "", "students.dtd");
OutputFormat format = new OutputFormat("\t", true);
format.setEncoding("UTF-8");
XMLWriter writer = new XMLWriter(new FileWriter(xmlName), format);
writer.write(doc);
writer.close();
2.5 DOM4J创建Document对象
Document doc = DocumentHelper.createDocument();
3.Document操作
3.1 遍历students.xml
- Element getRootElement():Document的方法,用来获取根元素;
- List elements():Element的方法,用来获取所有孩子元素;
- String attributeValue(String name):Element的方法,用来获取指定名字的属性值;
- Element element(String name):Element的方法,用来获取第一个指定名字的子元素;
- String elementText(String name):Element的方法,用来获取第一个指定名字的子元素的文本内容。
- 获取Document对象;
- 获取root元素;
- 获取root所有子元素
- 遍历每个student元素;
- 打印student元素number属性;
- 打印student元素的name子元素内容;
- 打印student元素的age子元素内容;
- 打印student元素的sex子元素内容。
4.XPath
4.1 什么是XPath
4.2 DOM4J对XPath的支持
- List selectNodes(String xpathExpression):在当前节点中查找满足XPath表达式的所有子节点;
- Node selectSingleNode(String xpathExpression):在当前节点中查找满足XPath表达式的第一个子节点;
- String valueOf(String xpathExpression):在当前节点中查找满足XPath表达式的第一个子节点的文本内容;
Document doc = reader.read(new FileInputStream("person.xml"));
Element root = doc.getRootElement();
List<Element> eList = root.selectNodes("/persons");
List<Element> eList1 = root.selectNodes("/persons/person/name");
List<Element> eList2 = root.selectNodes("//age");
List<Element> eList3 = root.selectNodes("//person/age");
List<Element> eList4 = root.selectNodes("/*/*/address");
List<Element> eList5 = root.selectNodes("//*");
List<Element> eList6 = root.selectNodes("/persons/person[1]");
List<Element> eList7 = root.selectNodes("/persons/person[last()]");
List<Element> eList8 = root.selectNodes("//@id");
List<Element> eList9 = root.selectNodes("//person[@id]");
List<Element> eList10 = root.selectNodes("//person[@*]");
List<Element> eList11 = root.selectNodes("//*[not(@*)]");
List<Element> eList12 = root.selectNodes("//person[@id='person1']");