JAVA中使用dom4j操作XML



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

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;

public class DOM4J {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SAXReader sax = new SAXReader();
		File f = new File("studentInfo.xml");
		try {
			Document doc = sax.read(f);
			//addXML(doc);
			//showXML(doc);
			
			//changXMl(doc);
			deleteXML(doc);
			saveXML(doc);
			
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	private static void deleteXML(Document doc){
		Element stus = doc.getRootElement();
		Iterator it  = stus.elementIterator();
		while(it.hasNext()){
			Element stu = (Element)it.next();
			String name = stu.elementText("name");
			if(name.equals("李四")){
				stus.remove(stu);
				break;
			}
		}
	}
	
	//保存XML
	private static void saveXML(Document doc){
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("gb2312");
		try {
			XMLWriter witer = new XMLWriter(new FileWriter("studentInfo.xml"),format);
			witer.write(doc);
			witer.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	//添加节点
	private static void addXML(Document doc){
		//获得根节点
		Element students = doc.getRootElement();
		//获得stu的element
		Element stu =  students.addElement("student");
		//将name标签添加进入,同时返回name标签本身
		Element name = stu.addElement("name");
		//往name标签中设置文本信息即<name>张三</name>
		name.setText("张三");
		name.addAttribute("age", "30");
		Element collage = stu.addElement("college");
		//往college标签中设置属性即<college leader="la">
		collage.addAttribute("leader", "la");
		collage.setText("北京大学");
		stu.addElement("telephone").setText("46579846645");
		stu.addElement("notes").setText("硕士毕业!!");
	}
	
	//显示XML
	private static void showXML(Document doc) {
		//获得根节点
		Element students = doc.getRootElement();
		//获得iterator
		Iterator  it = students.elementIterator();
		//遍历iterator
		while(it.hasNext()){
			Object obj = it.next();
			if(!(obj instanceof Element)){
				continue;
			}
			Element stu = (Element)obj;
			String name = stu.elementText("name");
			String college = stu.elementText("college");
			Element coll = stu.element("college");
			String leader = coll.attributeValue("leader");
			String telephone = stu.elementText("telephone");
			String notes = stu.elementText("notes");
			
			
			System.out.println("姓名:"+name);
			System.out.println("学院:"+college);
			System.out.println("leader:"+(leader==null?"无":leader));
			System.out.println("电话:"+telephone);
			System.out.println("备注:"+notes);
			System.out.println("*********************");
			
		}
	}
	
	//修改XML
	private static void changXMl(Document doc){
		Element students = doc.getRootElement();
		Iterator  it = students.elementIterator();
		while(it.hasNext()){
			Object obj = it.next();
			if(!(obj instanceof Element)){
				continue;
			}
			Element stu = (Element)obj;
			Element nameEl = stu.element("name");
			String name = nameEl.getText();
			if(name.equals("张三")){
				nameEl.setText("李四");
				stu.element("notes").setText("大学毕业!!");
			}
	
			
		}
	}

}


对应的XML文档为:

<?xml version="1.0" encoding="gb2312"?>

<students> 
  <student age="25"> 
    <!--如果没有age属性,默认的为20-->  
    <name>崔卫兵</name>  
    <college>PC学院</college>  
    <telephone>62354666</telephone>  
    <notes>男,1982年生,硕士,现就读于北京邮电大学</notes> 
  </student>  
  <student> 
    <name>张洪泽</name>  
    <college leader="leader">PC学院</college>  
    <!--如果没有leader属性,默认的为leader-->  
    <telephone>62358888</telephone>  
    <notes>男,1987年生,硕士,现就读于中国农业大学</notes> 
  </student>  
</students>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值