Dom4j解析xml之增删改查

本文详细介绍使用DOM4J库进行XML文件的读取、查询、增加、删除及修改操作,包括XPath路径选择和节点元素的处理技巧。

xml文件内容:

<?xml version="1.0" encoding="UTF-8"?>

<class>
  <student>
    <name>李明</name>  
    <age>25</age>
  </student>  
  <student>
    <name>小明</name>  
    <age>15</age>
  </student>
</class>

package cn.itsource.dom4jtest;

import static org.junit.Assert.*;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.dom4j.Node;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;


public class Dom4jTest {
	File f = new File("resources/student.xml");
	Document dom;
	Element root;
	@Before
	public void test() throws Exception {
		SAXReader reader = new SAXReader(); //创建对象
		dom = reader.read(f); // 获取dom对象
		root = dom.getRootElement(); // 获取根节点
		//root = (Element) dom.getRootElement();
		//System.out.println(root);
	}
	
	@Test  // Xpath
	public void xpathGet(){ 
		Node node2 = dom.selectSingleNode("/class/student[1]/age"); // 通过Xpath直接通过路径获取
	//	Node node = dom.selectSingleNode("/class/student[1]/name");
		//System.out.println(node2);
		//String content = node.getTextContent();
		System.out.println(node2.getText());
	}
	
	@Test  // 查
	public void select(){
		List list = root.elements("student"); // 只能从当前节点获取到其子节点, 不能获取到子孙节点
		//System.out.println(list);
		for (Object object : list) {
			Element obj = (Element) object;
			List list2 = obj.elements("name");
			for (Object object2 : list2) { // 想要获取子孙节点, 只能一步一步往下寻找
				Element obj2 = (Element) object2;
				System.out.println(obj2.getName());
			}
			System.out.println(obj.getName());
		}
	}
	
	@Test  // 增
	public void add(){
		Element ele= (Element)root.elements("student").get(0); // 获取到第一个student节点
		Element element = ele.addElement("gred");
		element.setText("90");
	}
	
	@Test  // 删
	public void delect(){
		Element ele= (Element)root.elements("student").get(0);
		Element parent = ele.getParent(); // 获取父节点
		parent.remove(ele); // 通过父亲删除子节点
	}
	
	@Test  // 改
	public void update(){
		Element ele= (Element)root.elements("student").get(0);
		Element element = ele.element("age"); // 获取想要修改的标签节点
		element.setText("25"); // 重新设置内容
	}
	
	
	@After  // 刷新,回写
	public void flush() throws IOException{
		OutputFormat prettyPrint = OutputFormat.createPrettyPrint();  // 票亮打印
		XMLWriter writer = new XMLWriter(new FileWriter(f), prettyPrint); // 获取XMLWriter对象
		writer.write(dom); // 将内存中内容写入到磁盘
		writer.close(); // 关闭流
	}
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值