目录
【XML文件】
【概述】:
XML的全称为(EXtensible Markup Language),是一种可扩展的标记语言
可扩展:标签的名字是可以自定义的
标记语言:通过标签来描述数据的一门语言(标签有时我们也将其称之为元素)
【作用】:
- 用于进行存储数据和传输数据
- 作为软件的配置文件
【XML标签规则】
- 标签由一对尖括号和合法标识符组成 例:<student>
- 标签必须成对出现 例:开始标签:<student> 结束标签:</student>
- 特殊的标签可以不成对,但是必须有结束标记 例:<address/>
- 标签中可以定义属性,属性和标签名空格隔开,属性值必须用引号引起来 例:<student id="1"> </student>
- 标签需要正确的嵌套
例:<student id="1">
<name>张三</name>
</student>
【XML语法规则】
- XML文件的后缀名为:xml
- 文档声明必须是第一行第一列
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
version:该属性是必须存在的
encoding:该属性不是必须的
打开当前xml文件的时候应该是使用什么字符编码表(一般取值都是UTF-8)
standalone: 该属性不是必须的,描述XML文件是否依赖其他的xml文件,取值为yes/no
- 必须存在一个根标签,有且只能有一个
- XML文件中可以定义注释信息
- XML文件中可以存在以下特殊字符
< < 小于
> > 大于
& & 和号
' ' 单引号
" " 引号
- XML文件中可以存在CDATA区
<![CDATA[ …内容… ]]>
【XML解析——DOM】
DOM(Document Object Model)文档对象模型:就是把文档的各个组成部分看做成对应的对象。
会把xml文件全部加载到内存,在内存中形成一个树形结构,再获取对应的值。
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<!--第一个学生信息-->
<student id="1">
<name>张三</name>
<age>23</age>
</student>
<!--第二个学生信息-->
<student id="2">
<name>李四</name>
<age>24</age>
</student>
</students>
Document对象:整个xml文档 Element对象:所有标签 Attribute对象:所有属性
Text对象:所有文本内容
【解析工具——Dom4j】
例:
//主程序调用
public static void main(String[] args) throws DocumentException {
//获取一个解析器对象
SAXReader saxReader = new SAXReader();
//利用解析器把xml文件加载到内存中,并返回一个文档
Document document = saxReader.read(new File("myxml\\xml\\student.xml"));
//获取到跟标签
Element rootElement = document.getRootElement();
//通过根标签来获取student标签
//elements():可以获取调用者所有的子标签。会把这些子标签放到一个集合中返回
//elements("标签名"):可以获取调用者所有的指定的子标签,会把这些子标签放到一个集合中返回
//List list = rootElement.elements();
ArrayList<Student> list = new ArrayList<>();
List<Element> studentElements = rootElement.elements("student");
//5.遍历集合,得到每一个student标签
for (Element element : studentElements) {
//获取id属性
Attribute attribute = element.attribute("id");
//获取id属性值
String id = attribute.getValue();
//获取name标签
//element("标签名"):获取调用者指定的子标签
Element nameElement = element.element("name");
//获取name标签的标签体内容
String name = nameElement.getText();
//获取age标签
Element ageElement = element.element("age");
//获取age标签的标签体内容
String age = ageElement.getText();
Student s = new Student(id, name, Integer.parseInt(age));
list.add(s);
}
//遍历操作
for (Student student : list) {
System.out.println(student);
}
}
}
//xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student id="1">
<name>张三</name>
<age>23</age>
</student>
<student id="2">
<name>李四</name>
<age>24</age>
</student>
</students>
【XML约束】
【概述】:
用来限定xml文件中可使用的标签以及属性
【分类】:
- DTD
- schema
【DTD约束和schema约束的区别】
- schema约束文件也是一个xml文件,符合xml的语法,这个文件的后缀名.xsd
- 一个xml中可以引用多个schema约束文件,多个schema使用名称空间区分(名称空间类似于java包名)
- DTD里面元素类型的取值比较单一常见的是PCDATA类型,但是在schema里面可以支持很多个数据类型
- schema 语法更加的复杂
【DTD约束】
【步骤】:
1、创建一个文件,这个文件的后缀名为.dtd。
2、看xml文件中使用了哪些元素
<!ELEMENT> 可以定义元素
3、判断元素是简单元素还是复杂元素。
简单元素:没有子元素。
复杂元素:有子元素的元素;
例:
//xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE persons SYSTEM 'persondtd.dtd'>
<persons>
<person>
<name>张三</name>
<age>23</age>
</person>
</persons>
//DTD约束文件
<!ELEMENT persons (person)>
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
【在xml中引入DTD约束文档】
【引入DTD约束的三种方法】
- 引入本地dtd <!DOCTYPE 根元素名称 SYSTEM 'DTD文件的路径'>
- 在xml文件内部引入 <!DOCTYPE 根元素名称 [ dtd文件内容 ]>
- 引入网络dtd <!DOCTYPE 根元素的名称 PUBLIC "DTD文件名称" "DTD文档的URL">
【DTD语法规则】
1、定义一个元素的格式为:<!ELEMENT 元素名 元素类型>
【简单元素】:
- EMPTY: 表示标签体为空
- ANY: 表示标签体可以为空也可以不为空
- PCDATA: 表示该元素的内容部分为字符串
【复杂元素】:直接写子元素名称。
- 多个子元素可以使用","或者"|"隔开;
- ","表示定义子元素的顺序 ;
- "|": 表示子元素只能出现任意一个
- "?"零次或一次,
- "+"一次或多次,
- "*"零次或多次;
如果不写则表示出现一次
例:
//xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE persons SYSTEM 'persondtd.dtd'>
<persons>//(复杂元素)
<person>//(复杂元素)
<name>张三</name>//(简单元素)
<age>23</age>//(简单元素)
</person>
</persons>
//DTD约束文件
<!ELEMENT persons (person+)>
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
2、定义一个属性的格式为:<!ATTLIST 元素名称 属性名称 属性的类型 属性的约束>
属性的类型:
- CDATA类型:普通的字符串
属性的约束:
- #REQUIRED: 必须的
- #IMPLIED: 属性不是必需的
- #FIXED value:属性值是固定的
例:
//xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE persons SYSTEM 'persondtd.dtd'>
<persons>
<person id="1">
<name>张三</name>
<age>23</age>
</person>
<person id="2">
<name>李四</name>
<age>24</age>
</person>
</persons>
//DTD约束文件
<!ELEMENT persons (person+)>
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ATTLIST person id CDATA #REQUIRED>
【schema约束】
【步骤】:
1、创建一个文件,这个文件的后缀名为.xsd。
2、定义文档声明
3、schema文件的根标签为:<schema>
4、在<schema>中定义属性:
xmlns=http://www.w3.org/2001/XMLSchema
5、在<schema>中定义属性:
targetNamespace =唯一的url地址。
指定当前这个schema文件的名称空间。
6、在<schema>中定义属性:
elementFormDefault="qualified"
表示当前schema文件是一个质量良好的文件。
7、通过element定义元素
8、判断当前元素是简单元素还是复杂元素
例:
//schema约束文件
<?xml version="1.0" encoding="UTF-8" ?>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itheima.cn/javase"
elementFormDefault="qualified"
>
<!--定义person复杂元素-->
<element name="persons">
<complexType>
<sequence>
<!--定义person复杂元素-->
<element name="person">
<complexType>
<sequence>
<!--定义name和age简单元素-->
<element name="name" type="string"></element>
<element name="age" type="string"></element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
【在xml中引入schema约束文档】
【步骤】:
1、在根标签上定义属性
xmlns="http://www.w3.org/2001/XMLSchema-instance"
2、通过xmlns引入约束文件的名称空间
3、给某一个xmlns属性添加一个标识,用于区分不同的名称空间
格式为: xmlns:标识=“名称空间地址” 。
标识可以是任意的,但是一般取值都是xsi
4、通过xsi:schemaLocation指定名称空间所对应的约束文件路径
格式为:xsi:schemaLocation = "名称空间url 文件路径“
例:
//xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<persons
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.itheima.cn/javase"
xsi:schemaLocation="http://www.itheima.cn/javase person.xsd"
>
<person>
<name>张三</name>
<age>23</age>
</person>
</persons>
【schema定义属性】
<attribute name="id" type="string" use="required"></attribute>
required(必须的)
optional(可选的)
例:
//xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<persons
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.itheima.cn/javase"
xsi:schemaLocation="http://www.itheima.cn/javase person.xsd"
>
<person id="1">
<name>张三</name>
<age>23</age>
</person>
</persons>
//schema约束文件
<?xml version="1.0" encoding="UTF-8" ?>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itheima.cn/javase"
elementFormDefault="qualified"
>
<!--定义person复杂元素-->
<element name="persons">
<complexType>
<sequence>
<!--定义person复杂元素-->
<element name="person">
<complexType>
<sequence>
<!--定义name和age简单元素-->
<element name="name" type="string"></element>
<element name="age" type="string"></element>
</sequence>
<attribute name="id" type="string" use="required"></attribute>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>