1.xml解析技术原理
1)不管是html文件还是xml文件都是标记型文档,都可以使用w3c组织定的dom技术来解析
2)document对象表示的是整个文档(可以是html文档,也可以是xml文档)
XML DOM教程
2.DOM4j介绍
1)Dom4j是一个简单、灵活的开放源代码的库(用于解析/处理xml文件)。Dom4j是由早期开发JDOM的人
分离出来而后独立开发的
2)与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对复杂一些,但它提供了比JDOM
更好的灵活性
3)Dom4j是一个非常优秀的java XML API,具有性能优异、功能强大和极易使用的特点,现在很多
软件都才有Dom4j
4)使用Dom4j开发,需下载dom4j相应的jar文件
3.Dom4j中获得·Document对象的三种方式
1)开发dom4j要导入的包
2)读取XML文件,获得document对象
SAXReader reader=new SAXReader();//创建一个解析器
Document document=reader.read(new File("src/input.xml"));//XML Domcument
3)解析XML形式的文本,得到document对象
String text="<members></members>";
Document document=DocumentG
Helper.parseText(text);
4)主动创建document对象
Document document=DocumentHelper.createDocument();//创建根节点
Element root=document.addElement("members");
4应用实例(主要是增删改查,重点遍历和指定查询)
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student id="01">
<name>小龙女</name>
<gender>女</gender>
<age>16</age>
<resume>古墓派掌门人</resume>
</student>
<student id="02">
<name>欧阳锋</name>
<gender>男</gender>
<age>18</age>
<resume>白驼山,蛤蟆神功</resume>
</student>
</students>
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.util.List;
public class Dom4j_ {
/**
* 演示如何加载xml文件
*/
@Test
public void loadXML() throws DocumentException {
//得到一个解析器
SAXReader reader = new SAXReader();
//debug看看document对象的属性
//
Document document = reader.read(new File("src/students.xml"));
System.out.println(document);
}
/**
* 演示如何遍历xml文件
*/
@Test
public void listStus() throws DocumentException {
SAXReader reader = new SAXReader();
//debug看看document对象的属性
//
Document document = reader.read(new File("src/students.xml"));
//得到rootElement
Element element=document.getRootElement();
//得到rootElement的student的Elements
List<Element> students = element.elements();
// System.out.println(students.size());
for (Element student : students) {//student就是Student元素
Element name = student.element("name");
Element gender = student.element("gender");
Element age = student.element("age");
Element resume = student.element("resume");
System.out.println("学生信息为:"+name.getText()+","+gender.getText()+","+
age.getText()+","+resume.getText());
}
}
/**
* 指定读取某一个学生信息
*/
@Test
public void readOne() throws DocumentException {
SAXReader reader=new SAXReader();
Document document=reader.read(new File("src/students.xml"));
Element element=document.getRootElement();
Element student = (Element) element.elements("student").get(0);
Element name = student.element("name");
Element gender = student.element("gender");
Element age = student.element("age");
Element resume = student.element("resume");
System.out.println("学生信息为:"+name.getText()+","+gender.getText()+","+
age.getText()+","+resume.getText());
//获取属性
System.out.println(student.attributeValue("id"));
}
}
增删改:
nt document=reader.read(new File("src/students.xml"));
//找到该元素第一个学生
Element student = (Element) document.getRootElement().elements("student").get(2);
//删除元素
student.getParent().remove(student);
//删除某个元素的属性
// student.remove(student.attribute("id"));
//更新xml
OutputFormat output=OutputFormat.createPrettyPrint();
output.setEncoding("UTF-8");
//把xml文件更新
XMLWriter writer=new XMLWriter(new FileOutputStream(new File("src/students.xml")),
output);
writer.write(document);
writer.close();
System.out.println("删除成功");
}
/**
* 修改:所有学生年龄+3
*/
@Test
public void update() throws DocumentException, IOException {
//得到解析器
SAXReader reader=new SAXReader();
//指定解析哪个xml文件
Document document=reader.read(new File("src/students.xml"));
List<Element> students =document.getRootElement().elements("student");
//遍历,所有学生age+3
for (Element student:students){
//取出年龄,然后+3
Element age=student.element("age");
age.setText((Integer.parseInt(age.getText())+3)+" ");
}
OutputFormat output=OutputFormat.createPrettyPrint();
output.setEncoding("utf-8");
XMLWriter writer=new XMLWriter(new FileOutputStream(new File("src/students.xml")),output);
writer.write(document);
writer.close();
System.out.println("修改成功");
}