XML的全称为(EXtensible Markup Language),是一门可拓展的标记语言
标记语言:通过标签来描述数据的一门语言(标签有时我们称之为元素),类似于HTML语言 java中作用
- 用于储存和传输数据软件的配置文件
万维网联盟(W3C)标准 HTML XML 制定web标准
例子:XML表示一个学生数据内容二:标准XML文件(要求)===》配置文件张三 18
虽然要求多但是每次都一样
XML文件的后缀名为:.xml
文档生命必须是第一行第一列
version:该属性是必须存在的
encoding:该属性不是必须的
打开当前xml文件的时候应该是使用什么字符编码表(一般取值是UTF-8)
standalone:该属性不是必须的,描述xml文件是否依赖其他的xml文件,取值为yes/no
必须存在一个根标签,有且只能有一个
XML文件中可以定义注释信息
XML文件中可以存在以下特殊字符
<;< 小于>;> 大于&; & 和号&apos;’ 单引号"; “ 双引号
另外表示特殊字符方式
ML文件中可以存在CDATA区
例子:内容三:xml解析张三 18 <学生">>其&它'特殊'"符号" 学生 李四 20
XML作为了配置文件(java读取这个内容)
XML解析就是从xml中获取到数据
解析的思想:—重点
DOM(document Object Model)文档对象模型:就是把文档的各个组成部分看成对应的对象。
会把xml文件全部加载到内存,在内存中形成一个 树形结构,再获取对应的值。
常见xml解析工具很多:
JAXP:SUN公司提供的一套XML解析的APIJDOM:开源组织提供的一套XML的解析API-jdomDOM4j(本次使用的):开源组织提供的一套xml的解析的API-dom4j,全称:Dom For Javapull:主要应用再Android手机端解析xml
实现解析----》java导入包外部包
- 我们可以通过网站:https://dom4j.github.io/ 去下载dom4j将下载好的dom4j-1.6.1zip解压,找到里面的dom4j-1.6.1.jar在IDEA中当前模块下新建一个libs文件夹,将jar包复制到文件夹中选中jar包–右键–选择add as library/添加为库 即可
- 解析提供好的xml文件(学生的配置信息)将解析到的数据封装到学生对象中并将学生对象储存到ArrayList集合中遍历集合
学生类 -->设计思路(学号 姓名 年龄)张三 23 李四 24
//上边是已经准备好的student.xml文件
public class Student
{
private String id;
private String name;
private int age;
public Student(){}
public Student(String id,String name,int age)
{
this.id=id;
this.name=name;
this.age=age;
}
//set和get方法
public void setId(String id){this.id=id;}
public void setName(String name){this.name=name;}
public void setAge(int age){this.age=age;}
public String getId(){return id;}
public String getName(){return name;}
public int getAge(){return age;}
//重写toString方法
@Override
public String toString()
{
return "student{"+"id='"+id+'''+ ",name='"+name+'''+",age='"+age+'''+'}'
}
}
解析的API思路(固定的)
获取一个解析器对象
SAXReader saxReader = new SAXReader();
利用解析器把xml文件加载(read())到内存中,返回一个文档对象
获取根标签getRootElement();
elements():可以获取调用者所有的字标签,会把这些字标签放到一个集合中返回
elements(“标签名”):可以获取调用者所有的制定的子标签,会把这些标签放到一个集合中并返回
element.element(“标签的名字”) 获取指定的标签内容
element.attribute(“属性的名字”) 获取指定的属性内容
element.getText() 获取标签的内容
import org.dom4j.Attribute; // 获取Attribute属性值
import org.dom4j.document; // 处理xml文件 如读取
import org.dom4j.documentException; // 文档异常处理
import org.dom4j.Element; // 获取元素
import org.dom4j.io.SAXReader; // 解析xml数据
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class jwXmlparse
{
public static void main(String[] orgs) throws documentException
{
//1.获取一个解析器对象
SAXReader saxReader = new SAXReader();
//2.利用解析器把xml文件加载(read())到内存中,并返回一个文档对象
document jwdocument = saxReader.read(new File("jwstudent.xml"));
//3.获取根标签getRootElement();
Element jwrootElement = jwdocument.getRootElement();
//4.elements():可以获取调用者所有的子标签,会把这些子标签放到一个集合中返回
//5.elements("标签名"):可以获取调用者所有的指定的子标签,会把这些子标签放到一个集合中并返回
List jwstus = jwrootElement.element("student");
System.out.println(jwstus.size());//查看学生数量
//6.创建集合,存放内容
ArrayList jwlist = new ArrayList<>();
//遍历所有的学生
for(Element jwelement:jwstus)
{
//得到了每一个学生标签
//先获取便签id的属性值
//7.element.attribute(“属性的名字”) 获取指定的属性内容
Attribute attribute = jwelement.attribute("id");//获取属性的名字和值
//获取属性的值getValue();
String id = attribute.getValue();
//再获取学生的name标签值
//获取标签下的(student标签下的name标签) API element(标签的名字)
Element nameElement = jwelement.element("name");
//获取这个标签的标签体内容getText();
String name = nameElement.getText();
//获取age标签的内容
//获取标签下的标签(student标签下的name标签) API element(标签的名字)
Element ageElement = jwelement.element("age");
//getText()获取这个标签的标签体内容
String age = ageElement.getText();
//将获取到的数据封装到集合中去
student s = new student(id,name,Intteger.parseInt(age));
jwlist.add(s);
}
}
}
注:其他的都是大同小异 套用此模板进行解析



