如果希望把某些字符串, 当作普通文本, 使用CDATA包括
mary
22
女
]]>
转义符 | 符号 |
---|---|
< | < |
> | > |
& | & |
" | " |
' | ' |
1.Dom4j
是一个简单, 灵活的开放源代码的库(用于解析 / 处理XML
文件). Dom4j
是由早期开发JDOM
的人分离出来而后独立开发的.
2.与JDOM
不同的是, dom4j
使用接口和抽象基类, 虽然Dom4j
的API
相对要复杂一些, 但它提供了比JDOM
更好的灵活性.
3.Dom4j
是一个非常优秀的Java XML API
, 具有性能优异, 功能强大和极易使用的特点. 现在很多软件采用的Dom4j
.
4.使用Dom4j
开发, 需下载dom4j
相应的jar
文件.
文档: https://dom4j.github.io/javadoc/1.6.1/
本地文档: dom4j-1.6.1\docs\index.html
Dom4j中, 获得Document对象的三种方式
1.读取XML
文件, 获得document
对象
SAXReader reader = new SAXReader(); //创建解析器
Document document = read.read(new File(“src/input.xml”)); //XML Document
2.解析XML
形式的文本, 得到document
对象
String text = “
Documeng document = DocumentHelper.parseText(text);
3.主动创建document
对象
Document document = DocumentHelper.createDocument(); //创建根节点
Element root = document.addElement(“members”);
1.使用DOM4J
堆students.xml
文件进行增删改查
xml
增删改使用少, 作为扩展, 给出案例2.xml 项目下新建lib文件夹, 引入dom4j
依赖的jar
包 dom4j-1.6.1.jar
<students>
<student id="01">
<name>小龙女name>
<gender>女gender>
<age>16age>
<resume>古墓派掌门人resume>
student>
<student id="02">
<name>欧阳锋name>
<gender>男gender>
<age>18age>
<resume>白驼山, 蛤蟆神功resume>
student>
students>
5.src/Dom4j_.java
/*指定读取第一个学生的信息*/
@Test
public void readOne() throws DocumentException {
//获取解析器
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/students.xml"));
//1.获取rootElement
Element rootElement = document.getRootElement();
//2.获取第一个学生
Element student = (Element) rootElement.elements("student").get(0);
//3.遍历student元素的节点并输出各个子节点的Text属性
Element name = student.element("name");
Element age = student.element("age");
Element gender = student.element("gender");
System.out.println("name=" + name.getText() + " age=" + age.getText() + " gender=" + gender.getText());
//4.获取指定 student元素/节点 的属性值
System.out.println("id=" + student.attributeValue("id"));
}
attributeValue
获取指定 student元素/节点 的属性值
System.out.println("id=" + student.attributeValue("id"));
/*添加一个学生节点到xml文件中*/
@Test
public void add() throws DocumentException, IOException {
//1.拿到解析器
SAXReader reader = new SAXReader();
//2.指定解析哪个Xml文件
Document document = reader.read(new File("src/students.xml"));
//3.首先创建一个学生节点对象
Element student = DocumentHelper.createElement("student");
// 创建name, age, gender子节点
Element student_name = DocumentHelper.createElement("name");
Element student_age = DocumentHelper.createElement("age");
Element student_gender = DocumentHelper.createElement("gender");
// 如何给元素添加属性
student.addAttribute("id", "003");
student_name.setText("威震天");
student_age.setText("40000");
student_gender.setText("机器族");
//4.把三个子元素添加到student节点下
student.add(student_name);
student.add(student_age);
student.add(student_gender);
// 再把student节点挂载到rootElement下
document.getRootElement().add(student);
// 直接输出会中文乱码
OutputFormat outputFormat = OutputFormat.createPrettyPrint();
outputFormat.setEncoding("utf-8");
//5.使用到IO编程 文件字节输出流
XMLWriter Writer =
new XMLWriter(new FileOutputStream(new File("src/students.xml")), outputFormat);
Writer.write(document);
Writer.close();
}
/*删除元素 删除最后一个学生信息*/
@Test
public void delete() throws DocumentException, IOException {
//1.拿到解析器
SAXReader reader = new SAXReader();
//2.指定解析哪个Xml文件
Document document = reader.read(new File("src/students.xml"));
//3.找到最后一个学生节点
Element student = (Element) document.getRootElement().elements("student").get(2);
//拿到父节点 删除元素
student.getParent().remove(student);
//直接输出会中文乱码
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();
}
/*修改元素(所有元素的age+3)*/
@Test
public void update() throws DocumentException, IOException {
//1.拿到解析器
SAXReader reader = new SAXReader();
//2.指定解析哪个Xml文件
Document document = reader.read(new File("src/students.xml"));
//3.拿到所有的student元素
List<Element> students = document.getRootElement().elements("student");
//遍历
for (Element student : students) {
//设置所有学生的年龄
Element age = student.element("age");
age.setText(Integer.parseInt(age.getText()) + 3 + "");
}
//直接输出会中文乱码
OutputFormat output = OutputFormat.createPrettyPrint();
output.setEncoding("utf-8");
//4.IO流 文件字节输出流
XMLWriter writer = new XMLWriter(
new FileOutputStream(new File("src/students.xml")), output);
writer.write(document);
writer.close();
}
//1.拿到解析器
SAXReader reader = new SAXReader();
//2.指定解析books.xml文件
Document document = reader.read(new File("src/books.xml"));
//拿到rootElement下的 book元素
List<Element> books = document.getRootElement().elements("book");
ArrayList<Book> list = new ArrayList<>();
Book book1 = null;
int id = 0;
String name = "";
String author = "";
double price = 0;
//循环遍历 book节点
for (Element book : books) {
id = Integer.parseInt(book.attributeValue("id"));
name = book.element("name").getText();
author = book.element("author").getText();
price = Double.parseDouble(book.element("price").getText());
book1 = new Book(id, name, author, price);
list.add(book1);
}
for (int i = 0; i < list.size(); i++) {
Book book = list.get(i);
System.out.println("编号 " + book.getId() + "\t\t作者 " + book.getAuthor() +
"\t\t书名 " + book.getName() + "\t\t价格 " + book.getPrice());
}