XML要点总结
·
一、XML 技术用于解决什么问题
●
解决程序间数据传输的问题:
=> json
比如
qq
之间的数据传送,用
xml
格式来传送数据,具有良好的可读性,可维护性。
● xml
可以做
配置文件
xml
文件做配置文件可以说非常的普遍,比如我们的
tomcat
服务器的
server.xml
,
web.xml
● xml
可以充当小型的数据库
=>
程序自己的数据格式存放
xml
文件做小型数据库,也是不错的选择,我们程序中可能用到的数据,如果放在数据库
中读取不合适
(
因为你要增加维护数据库工作
)
,可以考虑直接用
xm
来做小型数据库 ,而且
直接读取文件显然要比读取数据库快
二、DOM4j
1.XML 解析技术原理
(1)
不管是
html
文件还是
xml
文件它们都是标记型文档,都可以使用
w3c
组织制定的
dom
技术来解析
(2)document
对象表示的是整个文档(可以是
html
文档,也可以是
xml
文档)
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 对象的方式有三种
●
开发
dom4j
要导入
dom4j
的包
(1)读取
XML
文件
,
获得
document
对象
SAXReader reader = new SAXReader();
//
创建一个解析器
Document
document = reader.read(new File("
src/input.xml
"));//XML Document
(2)解析
XML
形式的文本
,
得到
document
对象
String text = "<members></members>";
Document document = DocumentHelper.parseText(text);
(3)主动创建
document
对象
.
Document document = DocumentHelper.createDocument();
//
创建根节点
Element root = document.addElement("members");
4.DOM4j 应用实例
<?xml version="1.0" encoding="utf-8"?>
<students>
<student id="01">
<name>小龙女</name>
<gender>女</gender>
<age>19</age>
<resume>古墓派掌门人</resume>
</student>
<student id="02">
<name>欧阳锋</name>
<gender>男</gender>
<age>21</age>
<resume>白驼山,蛤蟆神功</resume>
</student>
</students>
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
/**
* @author 韩顺平
* @version 1.0
*/
public class Dom4j_ {
/**
* 演示如何加载xml文件
*/
@Test
public void loadXML() throws DocumentException {
//得到一个解析器
SAXReader reader = new SAXReader();
//老师的代码技巧->debug 看看document对象的属性
//分析了document对象的底层结构
Document document = reader.read(new File("src/students.xml"));
System.out.println(document);
}
/**
* 遍历所有的student信息
*/
@Test
public void listStus() throws DocumentException {
//得到一个解析器
SAXReader reader = new SAXReader();
//老师的代码技巧->debug 看看document对象的属性
//分析了document对象的底层结构
Document document = reader.read(new File("src/students.xml"));
//1. 得到rootElement, 你是OOP
Element rootElement = document.getRootElement();
//2. 得到rootElement的student Elements
List<Element> students = rootElement.elements("student");
//System.out.println(student.size());//2
for (Element student : students) {//element就是Student元素/节点
//获取Student元素 的name Element
Element name = student.element("name");
Element age = student.element("age");
Element resume = student.element("resume");
Element gender = student.element("gender");
System.out.println("学生信息= " + name.getText() + " " + age.getText() +
" " + resume.getText() + " " + gender.getText());
}
}
/**
* 指定读取第一个学生的信息 就是 dom4j+xpath
*/
@Test
public void readOne() throws DocumentException {
//得到一个解析器
SAXReader reader = new SAXReader();
//老师的代码技巧->debug 看看document对象的属性
//分析了document对象的底层结构
Document document = reader.read(new File("src/students.xml"));
//1. 得到rootElement, 你是OOP
Element rootElement = document.getRootElement();
//2. 获取第一个学生
Element student = (Element) rootElement.elements("student").get(1);
//3. 输出该信息
System.out.println("该学生的信息= " + student.element("name").getText() + " " +
student.element("age").getText() + " " + student.element("resume").getText() +
student.element("gender").getText());
//4. 获取student元素的属性
System.out.println("id= " + student.attributeValue("id"));
}
/**
* 加元素(要求: 添加一个学生到xml中) [不要求,使用少,了解]
* @throws Exception
*/
@Test
public void add() throws Exception {
//1.得到解析器
SAXReader saxReader = new SAXReader();
//2.指定解析哪个xml文件
Document document = saxReader.read(new File("src/students.xml"));
//首先我们来创建一个学生节点对象
Element newStu = DocumentHelper.createElement("student");
Element newStu_name = DocumentHelper.createElement("name");
//如何给元素添加属性
newStu.addAttribute("id", "04");
newStu_name.setText("宋江");
//创建age元素
Element newStu_age = DocumentHelper.createElement("age");
newStu_age.setText("23");
//创建resume元素
Element newStu_intro = DocumentHelper.createElement("resume");
newStu_intro.setText("梁山老大");
//把三个子元素(节点)加到 newStu下
newStu.add(newStu_name);
newStu.add(newStu_age);
newStu.add(newStu_intro);
//再把newStu节点加到根元素
document.getRootElement().add(newStu);
//直接输出会出现中文乱码:
OutputFormat output = OutputFormat.createPrettyPrint();
output.setEncoding("utf-8");//输出的编码utf-8
//把我们的xml文件更新
// lets write to a file
//new FileOutputStream(new File("src/myClass.xml"))
//使用到io编程 FileOutputStream 就是文件字节输出流
XMLWriter writer = new XMLWriter(
new FileOutputStream(new File("src/students.xml")), output);
writer.write(document);
writer.close();
}
/**
* //删除元素(要求:删除第一个学生) 使用少,了解
* @throws Exception
*/
@Test
public void del() throws Exception {
//1.得到解析器
SAXReader saxReader = new SAXReader();
//2.指定解析哪个xml文件
Document document = saxReader.read(new File("src/students.xml"));
//找到该元素第一个学生
Element stu = (Element) document.getRootElement().elements("student").get(2);
//删除元素
stu.getParent().remove(stu);
// //删除元素的某个属性
// stu.remove(stu.attribute("id"));
//更新xml
//直接输出会出现中文乱码:
OutputFormat output = OutputFormat.createPrettyPrint();
output.setEncoding("utf-8");//输出的编码utf-8
//把我们的xml文件更新
XMLWriter writer = new XMLWriter(
new FileOutputStream(new File("src/students.xml")), output);
writer.write(document);
writer.close();
System.out.println("删除成功~");
}
/**
* //更新元素(要求把所有学生的年龄+3) 使用少,了解
* @throws Exception
*/
@Test
public void update() throws Exception {
//1.得到解析器
SAXReader saxReader = new SAXReader();
//2.指定解析哪个xml文件
Document document = saxReader.read(new File("src/students.xml"));
//得到所有学生的年龄
List<Element> students = document.getRootElement().elements("student");
//遍历, 所有的学生元素的age+3
for (Element student : students) {
//取出年龄
Element age = student.element("age");
age.setText((Integer.parseInt(age.getText()) + 3) + "");
}
//更新
//直接输出会出现中文乱码:
OutputFormat output = OutputFormat.createPrettyPrint();
output.setEncoding("utf-8");//输出的编码utf-8
//把我们的xml文件更新
XMLWriter writer = new XMLWriter(
new FileOutputStream(new File("src/students.xml")), output);
writer.write(document);
writer.close();
System.out.println("更新成功~");
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)