XML
一、XML基础
1、XML概述: XML的全称为(Extensible Markup Language),是一种可扩展的标记语言
标记语言:通过标签来描述数据的一门语言(标签有时我们也将其称值为元素)
可扩展:标签的名字是可以自己定义的
语法规则 | 示例代码 |
---|---|
使用一对尖括号和一组合法标识符组成 | |
在xml标签往往是成对出现,有开始也有结束 | |
在xml有些特殊的标签也可以不成对出现,但是必须要存在结束标记 | |
在xml中标签可以定义属性,但是属性必须通过引号引起来 | |
标签可以进行正确嵌套 |
用于进行存储数据和传输数据(把数据按照xml文件格式存储起来,并且可以把xml文件作为数据的载体在多个系统之间进行传输)
作为软件的配置文件(可以把软件在运行时所需要的一些信息按照xml文件的格式配置到文件中)
3、XML语法规则:语法规则 | 示例代码 |
---|---|
xml文件的后缀名普遍都是xml | user.xml,student.xml |
xml要有文档声明,文档声明必须是第一行第一列 | |
xml必须要存在一个根标签,并且有且仅有一个 | |
xml文件中可以定义注释信息 | |
文件中可以存在以下特殊符号 | &It; >;(这里使用了中文符号) |
xml文件中可以存在CDATA区(用于直接表示特殊符号) | b]]> |
文档声明属性说明:
version:必须的,声明当前xml文件的版本。一般我们使用的都是1.0
encoding:不是必须的,字符集,是使用浏览器打开的时候采用的默认的字符集编码
standalone:不是必须的,描述XML文档是否需要依赖其它的文件
4、如何验证XML是否正确:
有两种方式:
通过idea开发工具进行校检,如果xml编写的有问题,idea会给出错误的提示信息
通过浏览器打开,如果可以正常显示xml文件的内容,那么就说明我们所编写的xml文件没有问题,
如果我们编写的xml文件是存在问题的,那么在使用浏览器打开的时候就会出错
二、XML解析思想
所谓解析就是从xml中获取到数据
常见的解析思想:DOM(Document Object Model)文档对象模型,就是把文档的各组成部分看做成对应的对象
说明:
使用一个Document对象来代表整个xml文档
xml文档中的标签(元素),使用Element对象表示
一对标签中 (<>这里<>)的文本内容,使用Text对象表示
标签的属性,使用Attribute对象表示
Element,Text,Attribute这几个对象存在一个公共的父类就是Node
针对这种解析思想,不同的公司提供了不同的API的实现
常见的解析技术:
JAXP: SUN公司提供的一套XML的解析的API
JDOM: 开源组织提供了一套XML的解析的API-jdom
DOM4J: 开源组织提供了一套XML的解析的API-dom4j
pull: 主要应用在Android手机端解析XML
三、XML解析案例
需求:使用DOM4J解析students.xml文件,将解析到的数据封装到学生对象中,并将学生对象存储到ArrayList集合中,最后遍历集合
实现步骤:
创建学生类(id,name,age,address)
导入jar包(dom4j-1.6.1.jar)
创建解析器(可以参考dom4j文档中的index.html文件中的Quick start条目进行创建)
通过解析器读取xml文档数据,得到Document对象
获得根节点元素对象
从根节点下查找其他的节点元素,读取数据
参考代码:
package com.itheima;
public class Student {
private String id;
private String name;
private String age;
private String address;
public Student(){
}
public Student(String id, String name, String age, String address){
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Student{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age='" + age + '\'' +
", address='" + address + '\'' +
'}';
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student id = "stu001">
<name>张三</name>
<age>30</age>
<address>重庆</address>
</student>
<student id = "stu002">
<name>李四</name>
<age>33</age>
<address>四川</address>
</student>
</students>
package com.itheima;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
/*
需求:使用DOM4J解析students.xml文件,将解析到的数据封装到学生对象中,并将学生对象存储到ArrayList集合中,最后遍历集合
*/
public class XMLParseDemo {
public static void main(String[] args) throws FileNotFoundException, DocumentException {
//创建解析器
SAXReader saxReader = new SAXReader();
//获取Document对象
Document document = saxReader.read(new FileInputStream("itheima-xml\\students.xml"));
//获取根节点对象
Element rootElement = document.getRootElement();
//从根节点来查找其他的节点元素
List<Element> elements = rootElement.elements("student");
//定义存储学生对象的集合
ArrayList<Student> students = new ArrayList<Student>();
//遍历集合获得每一个学生元素
for(Element studentElement : elements){
//获取属性对象
Attribute attribute = studentElement.attribute("id");
//获取id属性的值
String id = attribute.getValue();
//获取name元素
Element nameElement = studentElement.element("name");
//获取name元素对应的内容
String name = nameElement.getText();
//获取age元素
Element ageElement = studentElement.element("age");
//获取age元素对应的内容
String age = ageElement.getText();
//获取address元素
Element addressElement = studentElement.element("address");
//获取address元素对应的内容
String address = addressElement.getText();
//将数据封装到学生对象中
Student s = new Student();
s.setId(id);
s.setName(name);
s.setAge(age);
s.setAddress(address);
students.add(s);
}
//遍历存储学生数据的集合
//使用lambda表达式的方式遍历
students.forEach(s -> System.out.println(s));
}
}
四、XML文档约束
xml文件最常见的作用就是作为软件的配置文件,那么解析xml文件的代码一般都是提前编写好的,而我们程序员只需要编写xml文件就可以了,但是如果编写这个xml文件时没有按照解析的要求去编写,而是随意去定义标签,那么在解析代码的时候势必就会出现问题
如何限定程序员在xml文件中去定义哪些标签呢?
我们就需要了解一下xml文件的约束技术
简单来说:xml文档约束技术,就是用来限定xml文件中可使用的标签以及属性
xml文件常见的约束技术有两种:
dtd
schema
标签:XML,xml,String,age,address,了解,简单,name From: https://www.cnblogs.com/fragmentary/p/17032196.html