概述
展标记语言,由程序设计编写者自定义实现
XML主要以标记文本形式表示一组或多组数据,使用XML格式传递数据可以实现跨平台跨计算机编程语言
语法规则
必写
<?xml version="1.0" encoding="UTF-8"?>
至少有一个根元素类
< <小于
>; >大于
& &和号
' '单引号
" "引号
XML文件的解析
DOM文档对象模型
SAX简单的XML API
JDOM java文件对象模型
DOM4J 拓展于JDOM
JDOM读取xml
创建SAXBuilder来构建加载目标XML文档
基于XML路径创建XML文件对象
使用SAXBuilder加载XML文件对象
利用JDOM相关方法解析XML文档封装成java对象
JDOM写入xml
创建XmlOutput用来修改写入XML文档
基于XML路径创建XML文件对象
使用SAXBuilder加载XML文件对象
利用JDOM相关方法将修改信息写入XML文档
整合
文件目录
student.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--此文档用来存储学生信息-->
<students><!--students是文档的根元素-->
<student code="stu001">
<chen>陈陈陈</chen>
<age>89</age>
<女>男</女>
</student>
<student code="stu002">
<name>张三</name>
<age>2</age>
<sex>女</sex>
</student>
<student code="stu003">
<name>鸿飞</name>
<age>23</age>
<sex>男</sex>
</student>
</students>
定义学生类,用来接收XML中的student信息
package entity;
public class Student {
private String name;
private int age;
private String sex;
private String code;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
获取当前路径的方法
package util;
public final class Tools {
public static String getClassPath(){
//获取当前应用程序类路径的通用方法
return Tools.class.getClassLoader().getResource("").getPath().toString();
}
}
XML的读取并存储,以及修改XML文件
package util;
import entity.Student;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.XMLOutputter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
public class JDOMxmlManager {
//用来解析xml文件
private static SAXBuilder saxbuilder;// 用来构建xml文档
private static Document document;// XML文档对象
private static XMLOutputter xmlOutput;
public static List<Student> toStudentFromXml(String xmlFileName){
//读取xml封装为Student对象,存储到List集合中
List<Student> stuList = new ArrayList<Student>();
newInstanceSAXBuilder();
String classPath = Tools.getClassPath();//调用获取类路径的方法
System.out.println(classPath);
/* 基于类路径创建目标xml文件的java.io.File对象*/
File xmlFile = new File(classPath+"day25/doc/"+xmlFileName);
System.out.println(classPath+"day25/doc/"+xmlFileName);
try {
document = saxbuilder.build(xmlFile);// 使用saxBuilder实例构建目标xml文件得到一个Document对象
if(document != null){
//如果文档不等于空,开始解析
Element root = document.getRootElement();//获取xml文档对象Document根节点
List<Element> studentList = root.getChildren();//获取根节点下的一级子元素
for(Element e:studentList){
// 循环遍历所有根节点下的Student子元素,并将其封装为Student学生对象
Student stuObj = new Student();
String code = e.getAttribute("code").getValue();// 获取当前元素的code属性对应的值
stuObj.setCode(code);
// 获取当前元素的子元素
String name = e.getChild("name").getText();
stuObj.setName(name);
String sex = e.getChild("sex").getText();
stuObj.setSex(sex);
int age = Integer.parseInt(e.getChild("age").getText());
stuObj.setAge(age);
//添加到List中
stuList.add(stuObj);
}