1、简介
dom4j是java中的XML API,性能优异、功能强大、开放源代码。
也是所有解析XML文件方法中最常用的!
2、代码实操
准备需要j的ar包添加到lib目录下,dom4j-2.1.1.jar(网上随便找一个)
新建项目,在项目下创建info.xml
<?xml version="1.0" encoding="UTF-8"?>
<phone>
<brand name="华为">
<type name="mate30"/>
</brand>
<brand name="苹果">
<type name="iphone12"/>
</brand>
<brand name="小米">
<type name="红米"/>
<type name="小米8"/>
</brand>
</phone>
创建类Test,再使用DOM4j实现对XML文件增删改查
1、获取Document对象
Document document=null;
private void getDocument() {
//创建解析器
SAXReader saxReader = new SAXReader();
//解析指定的XML文件
try {
document = saxReader.read(new File("info.xml"));
} catch (DocumentException e) {
throw new RuntimeException(e);
}
}
2、展示所有的手机信息(这里也可以按照上篇DOM方式解析一样使用递归)
private void showInfo() {
//获取根节点
Element root = document.getRootElement();
//Iterator<Element> iterator = root.elementIterator();
//while (iterator.hasNext()){
// Element next = iterator.next();
//}
/*这里是将遍历简写到for循环中,上面的while循环是我们通用的迭代器遍历 */
for(Iterator<Element> brandIte=root.elementIterator();brandIte.hasNext();){
//获取根节点下的所有子节点
Element brand = brandIte.next();
//输出元素节点名称和指定属性值
System.out.println(brand.getName()+"\t"+brand.attributeValue("name"));
//同样的方法,获取子节点
for(Iterator<Element> typeIte = brand.elementIterator();typeIte.hasNext();){
//接收每个子节点
Element type = typeIte.next();
//输出元素节点名称和指定属性值
System.out.println(type.getName()+"\t"+type.attributeValue("name"));
}
}
}
3、 添加手机信息
private void addInfo() {
//获取根节点
Element root = document.getRootElement();
//根节点中插入子节点
Element brand = root.addElement("brand");
//为子节点赋予属性值
brand.addAttribute("name","魅族");
//为brand节点插入子节点1
Element type1 = brand.addElement("type");
//为子节点赋予属性值
type1.addAttribute("name","哎呦");
//为brand节点插入子节点2
Element type2 = brand.addElement("type");
//为子节点赋予属性值
type2.addAttribute("name","卧槽");
//保存
save();
}
DOM4j跟DOM一样都要通过某种方式保存实现真正的数据交互
DOM4j是通过输出流的方式进行保存
private void save() {
//设置格式
OutputFormat format =OutputFormat.createPrettyPrint();
try {
//指定输出文件
XMLWriter writer = new XMLWriter(new FileWriter("info.xml"),format);
//输出当前document对象
writer.write(document);
//关流
writer.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
4、为每个手机品牌添加id编号文章来源:https://www.toymoban.com/news/detail-491412.html
private void updateInfo() {
//获取根节点
Element root = document.getRootElement();
//声明起始值用于输出编号
int i=0;
//遍历出子节点
for(Iterator<Element> brandIte = root.elementIterator();brandIte.hasNext();){
//接收每个子节点
Element brand = brandIte.next();
//为该子节点增加属性
brand.addAttribute("id",i+"");
i++;
}
//保存
save();
}
5、删除魅族手机文章来源地址https://www.toymoban.com/news/detail-491412.html
private void deleteInfo() {
//获取根节点
Element root = document.getRootElement();
//遍历出子节点
for(Iterator<Element> brandIte = root.elementIterator();brandIte.hasNext();){
//接收子节点
Element brand = brandIte.next();
//判断该节点属性name是否为魅族
if(brand.attributeValue("name").equals("魅族")){
//通过父节点删除该节点
brand.getParent().remove(brand);
}
}
//保存
save();
}
3、我的完整代码展示
package XML.DOM4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
Test test = new Test();
test.getDocument();
test.showInfo();
test.addInfo();
test.updateInfo();
test.deleteInfo();
}
/**
* 删除手机信息
*/
private void deleteInfo() {
Element root = document.getRootElement();
for(Iterator<Element> brandIte = root.elementIterator();brandIte.hasNext();){
Element brand = brandIte.next();
if(brand.attributeValue("name").equals("魅族")){
brand.getParent().remove(brand);
}
}
save();
}
/**
* 修改手机信息
*/
private void updateInfo() {
Element root = document.getRootElement();
int i=0;
for(Iterator<Element> brandIte = root.elementIterator();brandIte.hasNext();){
Element brand = brandIte.next();
brand.addAttribute("id",i+"");
i++;
}
save();
}
/**
* 添加手机信息
*/
private void addInfo() {
Element root = document.getRootElement();
Element brand = root.addElement("brand");
brand.addAttribute("name","魅族");
Element type1 = brand.addElement("type");
type1.addAttribute("name","哎呦");
Element type2 = brand.addElement("type");
type2.addAttribute("name","卧槽");
save();
}
/**
* 保存
*/
private void save() {
//设置格式
OutputFormat format =OutputFormat.createPrettyPrint();
try {
XMLWriter writer = new XMLWriter(new FileWriter("info.xml"),format);
writer.write(document);
writer.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
Document document=null;
/**
* 显示手机信息
*/
private void showInfo() {
Element root = document.getRootElement();
for(Iterator<Element> brandIte=root.elementIterator();brandIte.hasNext();){
Element brand = brandIte.next();
System.out.println(brand.getName()+"\t"+brand.attributeValue("name"));
for(Iterator<Element> typeIte = brand.elementIterator();typeIte.hasNext();){
Element type = typeIte.next();
System.out.println(type.getName()+"\t"+type.attributeValue("name"));
}
}
}
private void getDocument() {
SAXReader saxReader = new SAXReader();
try {
document = saxReader.read(new File("info.xml"));
} catch (DocumentException e) {
throw new RuntimeException(e);
}
}
}
到了这里,关于java使用DOM4j解析XML文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!