XML概述
xml是一种可扩展的标记语言
标记语言:通过标签来描述数据的一门语言(标签有时我们也将其称为元素)
可扩展:标签的名字是可以自定义的
可以理解为:XML文件是由很多标签组成的,而标签名是可以自定义的
作用:
1.用于进行存储数据和传输数据
2.作为软件的配置文件
XML标签规则
XML语法规则
在 XML 中,有 5 个预定义的实体引用:
< | < | 小于 |
> | > | 大于 |
& | & | 和号 |
' | ' | 单引号 |
" | " | 引号 |
<?xml version="1.0" encoding="UTF-8" ?>
<!--注释的内容 快捷键选中内容 ctrl+shift+/ 或ctr+/-->
<students>
<student id="1">
<name>张三</name>
<age>23</age>
<info>学生<>的信息</info>
<message><![CDATA[内容<<<<<<]]]></message>
</student>
<student id="2">
<name>李四</name>
<age>24</age>
</student>
</students>
解析XML
常见的解析思想
常见的解析工具(DOM4J)
dom4j下载地址
https://dom4j.github.io/
DOM4J练习
需求:
解析这个xml文件
将解析到的数据封装到学生对象中
并将学生对象存储到ArrayList集合中
遍历集合
package com.itheima.study;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class XmlParse {
public static void main(String[] args) throws DocumentException {
//1.获取一个解析器对象
SAXReader saxReader=new SAXReader();
//2.利用解析器把xml文件加载到内存中,并返回一个文档对象
Document document = saxReader.read(new File("untitled\\xml\\student.xml"));
//3.获取到根标签
Element rootElement = document.getRootElement();
//4.通过根标签来获取student标签
//elements();可以获取调用者所有的子标签,会把这些子标签放到一个集合中返回
//elements("标签名"):可以获得调用者所有的指定的子标签,会把这些子标签放到一个集合中返回
List list = rootElement.elements();
List<Element>studentElements = rootElement.elements("student");
//System.out.println(list.size());
//用来装学生的
ArrayList<Student> list1=new ArrayList<>();
//5.遍历集合,得到每一个student标签
for (Element element : studentElements) {
//element依次表示每一个student标签
//获取id这个属性
Attribute attribute = element.attribute("id");
//获取id的属性值
String id=attribute.getValue();
//获取name标签
//element("标签名"):获取调用者指定的子标签
Element nameElement = element.element("name");
//获取这个标签的标签体内容
String name=nameElement.getText();
System.out.println(id);
System.out.println(name);
Student s=new Student(id,name,parseInt(age));
list1.add(s);
}
//遍历操作
for(Student student:list1){
System.out.println(student);
}
}
}
什么是约束
用来限定xml文件中可使用的标签以及属性
告诉程序员,xml怎么写
约束的分类
DTD
schema
<!ELEMENT persons (person)>
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
引入DTD约束的方式之(在本地引入)
引入DTD约束的方式之(在xml文件内部引用)
引入DTD约束的方式之(引入网络中DTD)
schema和dtd的区别
1.schema约束文件也是一个xml文件,符合xml的语法,这个文件的后缀名.xsd
2.一个xml中可以引用多个schema约束文件,多个schema使用名称空间区分(名称空间类似于Java包名)
3.dtd里面元素类型的取值比较单一常见的是PCDATA类型,但是schema里面可以支持多个数据类型
4.schema语法更加的复杂
<?xml version="1.0" encoding="UTF-8" ?>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.itheima.cn/javase"
elementFormDefault="qualified">
<!--定义persons复杂元素-->
<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>
引入schema约束文件步骤
Schema定义属性