xml解析之DOM4j解析

    这是使用DOM4j解析来对xml文件进行的一个简单的增、删、改、查操作

     DOM4j需要一个jar包,不是JDK自带的

package com.DOM4j;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;

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;

public class Dom4jTest {
    public static void main(String[] args) throws Exception {
		//创建DOM4j对象
    	SAXReader reader=new SAXReader();
    	//将一个xml文件转换为document对象
    	Document doc=reader.read("xml/student.xml");
//    	
//    	//查询
//    	List<Student> list=select(doc);
//    	for(Student stu:list){
//    		System.out.println(stu.getId()+","+stu.getName()+","+stu.getSex()+","+stu.getAge()+","+stu.getClassNO()+","+stu.getScore());
//    	}
    	//添加
//    	add(doc,new Student("12005","玲玲","女",20,"IBM12002",89.6));
    	
    	//删除
//    	delete(doc,"12004");
    	
    	//修改
    	update(doc,new Student("12003","甜甜","女",20,"IBM12002",89.6));
	}
    
    //解析document对象
    public static List select(Document document){
    	List<Student> list=new ArrayList<Student>();
    	Element root=document.getRootElement();//得到根节点
    
    	//获得所有名字为student的节点
    	List allStu=root.elements();
    	for(int i=0;i<allStu.size();i++){
    	  Element stu=(Element)allStu.get(i);//获得第i个student节点
    	  
    	  String stuId=stu.attributeValue("stuID");
    	  
    	  String name=stu.element("name").getText();
   
    	  String sex=stu.element("sex").getText();
    	  
    	  String age=stu.element("age").getText();
    	  
    	  String classNO=stu.element("classno").getText();
    	 
    	  String score=stu.element("score").getText();
    	  Student s=new Student(stuId,name,sex,Integer.parseInt(age),classNO,Double.parseDouble(score));
    	  list.add(s);
//    	  System.out.println(stuId+name+sex+age+classNO+score);
    	}
    	return list;
    }
    
    //添加
    public static void add(Document doc,Student stu) throws Exception{
    	Element root=doc.getRootElement();//获得根节点
    	
    	Element student=DocumentHelper.createElement("Student");//在根节点下创建了一个学生节点
    	student.addAttribute("stuID", stu.getId());//属性
    	
    	Element name_node=DocumentHelper.createElement("name");//创建名字节点
    	name_node.setText(stu.getName());
    	student.add(name_node);
    	
    	Element sex_node=DocumentHelper.createElement("sex");//创建性别节点
    	sex_node.setText(stu.getSex());
    	student.add(sex_node);
    	
    	Element age_node=DocumentHelper.createElement("age");//创建年龄节点
    	age_node.setText(stu.getAge()+"");
    	student.add(age_node);
    	
    	Element classNO_node=DocumentHelper.createElement("classno");//创建班级节点
    	classNO_node.setText(stu.getClassNO());
    	student.add(classNO_node);
    	
    	Element score_node=DocumentHelper.createElement("score");//创建学分节点
    	score_node.setText(stu.getScore()+"");
    	student.add(score_node);
    	
    	root.add(student);
    	
    	//转换
    	OutputFormat format=OutputFormat.createPrettyPrint();
    	format.setEncoding("utf-8");	
    	XMLWriter writer=new XMLWriter(new FileOutputStream("xml/student.xml"),format);
    	writer.write(doc);
    }
    
    //删除
    public static void delete(Document doc,String stuID) throws Exception{
    	//删除操作:根据学号去查找到相应的学生,进行删除
    	Element root=doc.getRootElement();//获得根节点
    	
    	List list=root.elements("student");//获得所有的student节点
    	
    	for(int i=0;i<list.size();i++){    	
    		Element stu_node=(Element) list.get(i);//得到第i个student节点  		
    		String stuid=stu_node.attribute("stuID").getText();//得到属性值
    		System.out.println(stuid);
    		if(stuid.equals(stuID)){
    			root.remove(stu_node);
    		}
    	}
    	//转换
    	OutputFormat format=OutputFormat.createPrettyPrint();
    	format.setEncoding("utf-8");	
    	XMLWriter writer=new XMLWriter(new FileOutputStream("xml/student.xml"),format);
    	writer.write(doc);
    	
    }
    
    //修改
    public static void update(Document doc,Student stu) throws Exception{
    	//修改操作:根据学号去查找到相应的学生,进行修改
    	Element root=doc.getRootElement();//得到根节点
    	
    	List list=root.elements("student");//获得所有的student节点
    	for(int i=0;i<list.size();i++){
    		Element stu_node=(Element)list.get(i);//获得第i个student节点
    		
    		String stuid=stu_node.attributeValue("stuID");//获得属性值
    		System.out.println(stuid);
    		if(stuid.equals(stu.getId())){
    			Element name_node=stu_node.element("name");
    			name_node.setText(stu.getName());
    			
    			Element sex_node=stu_node.element("sex");
    			sex_node.setText(stu.getSex());
    			
    			Element age_node=stu_node.element("age");
    			age_node.setText(stu.getAge()+"");
    			
    			Element classNO_node=stu_node.element("classno");
    			classNO_node.setText(stu.getClassNO());
    			
    			Element score_node=stu_node.element("score");
    			score_node.setText(stu.getScore()+"");
    		}
    	}
    	//转换
    	OutputFormat format=OutputFormat.createPrettyPrint();
    	format.setEncoding("utf-8");	
    	XMLWriter writer=new XMLWriter(new FileOutputStream("xml/student.xml"),format);
    	writer.write(doc);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值