XMl概述
xml是可扩展的标记语言。它的标签都是自定义的,然后通过程序员写代码自己进行解析。
html的标签是预定义好的,每一个标签都有特定含义,这些标签可以被浏览器直接识别。
xml一般用来作为配置文件使用,它可以表示具有层次结构的数据。
xml标签的规则
1.标签都有由一对尖括号组成的
2.标签一般都是成对出现的,开始标签和结束标签的名称是一样的
<student></student>
3.标签可以是单独的一个标签,必须要有结束标签
<student/>
4.标签可以写属性,由属性名和属性值组成
<student name="zhagnsan" ></student>
5.标签可以嵌套,不能交叉
<student>
<name>zhagnsan</name>
<age>20</age>
</student>
xml文件的格式
1.xml文件的头部
<?xml version="1.0" encoding="UTF-8" ?>
2.一个xml文件有且只有一个根标签
3.类似于<>的特殊字符,需要用特殊符号代替
< < 小于
> > 大于
& & 和号
' ' 单引号
" " 引号
4.CDATA区:把需要显示的数据用CDATA区来表示,就不会当做xml的标签进行解析
<![CDATA[内容]]> // 用的得不多
<?xml version="1.0" encoding="utf-8" ?>
<students>
<student id="1">
<name>张三</name>
<age>18</age>
</student>
<student id="2">
<name>李四</name>
<age>20</age>
</student>
</students>
dom4j解析
xml文件其实就是一种具有特殊格式的文本文件,使用专门的类去读取xml文件的过程就叫做xml解析。很多第三方提供的工具类可以很方便的读取xml文件。Dom4j就是一个比较常用的。
SAXReader: Dom4j工具包提供的一个读取xml文件的解析器
Document: 整个xml文件
Element: 表示每一个标签 <标签>标签体</标签>
getText();才能获取标签体
Attribute: 标签的属性 <标签 属性名="属性值"></标签>
【属性名="属性值"】表示Attribute对象
getValue()方法才能获取属性值
使用dom4j解析xml文件的步骤
1.导入dom4j.jar文件
1)在模块下面新建一个libs文件夹
2)把dom4j.jar文件,复制到libs文件夹下
3)选中dom4j.jar右键Add As Library
2.使用dom4j解析xml文件 (查看dom4j提供的文档,来写代码)
public class XmlParse {
public static void main(String[] args) throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("day17\\xml\\students.xml"));
//获取根标签 <students>
Element rootElement = document.getRootElement();
//获取根标签下面的子标签 <student>
List<Element> list = rootElement.elements("student");
List<Student> students=new ArrayList<>();
for (Element element : list) {
//获取<student>的id属性的值
String id = element.attribute("id").getValue();
//获取<student>的子标签<name>
String name = element.element("name").getText();
//获取<student>的子标签<age>
String age = element.element("age").getText();
//把获取到的id、name和age封装尾Student对象
Student stu=new Student(id,name,Integer.parseInt(age));
//把Student对象添加到集合
students.add(stu);
}
for (Student student : students) {
System.out.println(student);
}
}
}
DTD约束
约束是用来限定xml的标签可以写那些内容
<!ELEMENT students (student)+>
<!ELEMENT student (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE students SYSTEM 'students.dtd' >
<students>
<student>
<name>张三</name>
<age>18</age>
</student>
<student>
<name>李四</name>
<age>20</age>
</student>
</students>
Schema约束
Schema是用来约束xml的一种约束文件,用来规定xml可以写哪些标签,标签中可以写哪些属性等。
Schema本身也是一个xml格式的文件。
- 新建schema文件students.xsd
<!--xml的文档标记-->
<?xml version="1.0"?>
<!--固定写法,表示Schema受到w3c的约束-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
<!--目标的命名空间,schmea文件作用在哪个xml文件中,可以通过命名空间来指定-->
targetNamespace="http://www.itheima.com"
xmlns="http://www.w3school.com.cn"
<!--表示schema是一个完整的文件-->
elementFormDefault="qualified">
<!--表示根元素-->
<xs:element name="students">
<!--表示元素是一个复杂元素-->
<xs:complexType>
<xs:element name="student">
<!--表示元素是一个复杂元素-->
<xs:complexType>
<!--表示元素是有顺序-->
<xs:sequence>
<!--表示子元素name,数据类型是strings-->
<xs:element name="name" type="xs:string"/>
<!--表示子元素age,数据类型是strings-->
<xs:element name="age" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:complexType>
</xs:element>
</xs:schema>
- 引入schema文件
<?xml version="1.0"?>
<students
xmlns="http://www.itheima.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itheima.com students.xsd">
<student>
<name>张三</name>
<age>18</age>
</student>
<student>
<name>李四</name>
<age>20</age>
</student>
</students>