xml-使用dom4j对xml文件进行crud操作

TestXml2.java:
package com.hyj;


import java.io.*;
import java.util.Iterator;
import java.util.List;


import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;


public class TestXml2 {


	
	//使用dom4j对xml文件进行crud操作
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		//1.得到解析器
		SAXReader saxReader=new SAXReader();
		//2.指定解析哪个xml文件
		Document document=saxReader.read(new File("src/classes.xml"));
		
	//	list(document.getRootElement());//得到根元素
		add(document);
	}
	
	
	//更新元素(要求:把所有学生的年龄全部+3)
	public static void update(Document document) throws Exception{
		
		//得到所有学生的年龄
		List<Element> stus=document.getRootElement().elements("stu");
		for(Element stu:stus){
			int newAge=Integer.parseInt(stu.element("age").getText())+3;
			stu.element("age").setText(newAge+"");
			
			//更新属性
			stu.element("name").addAttribute("别名", "hello world");
		}
	
		
		//更新
		
		//直接输出会出现中文乱码
				OutputFormat output=OutputFormat.createPrettyPrint();
				output.setEncoding("UTF-8");//输出编码utf-8
				
				//如果使用FileWriter仍然会出现乱码,所以要使用FileOutputStream
				//把我们的xml文件更新
				XMLWriter writer=new XMLWriter(new FileOutputStream(new File("src/classes.xml")),output);
				writer.write(document);
				writer.close();
	}
	
	
	//删除元素(要求:删除第一个学生)
	public static void del(Document document) throws Exception{
		
		//找到该元素
		Element stu1=document.getRootElement().element("stu");
			//删除元素的某个属性
		Attribute attribute=stu1.element("name").attribute("别名");
//		System.out.println(attribute.getValue());
		stu1.element("name").remove(attribute);
		//删除(元素)
//		stu1.getParent().remove(stu1);
		//更新
		
		//直接输出会出现中文乱码
		OutputFormat output=OutputFormat.createPrettyPrint();
		output.setEncoding("UTF-8");//输出编码utf-8
		
		//如果使用FileWriter仍然会出现乱码,所以要使用FileOutputStream
		//把我们的xml文件更新
		XMLWriter writer=new XMLWriter(new FileOutputStream(new File("src/classes.xml")),output);
		writer.write(document);
		writer.close();
	}
	
	
	//添加元素(要求添加一个学生到xml文件中)
	public static void add(Document document) throws IOException{
		
		//首先我们来创建一个学生节点对象 Node=Element
		Element newStu=DocumentHelper.createElement("stu");
		Element newStu_name=DocumentHelper.createElement("name");
		//如何给元素添加属性
		newStu_name.addAttribute("别名", "江江");
		newStu_name.setText("宋江");
		Element newStu_sex=DocumentHelper.createElement("sex");
		Element newStu_age=DocumentHelper.createElement("age");
		Element newStu_intro=DocumentHelper.createElement("intro");
		
		//把三个子元素(节点)加到newStu下
		newStu.add(newStu_name);
		newStu.add(newStu_sex);
		newStu.add(newStu_age);
		newStu.add(newStu_intro);
		
		//再把newStu节点加到跟元素下
	//	document.getRootElement().add(newStu);
		//添加到指定位置
		document.getRootElement().elements().add(0, newStu);
		
		//直接输出会出现中文乱码
		OutputFormat output=OutputFormat.createPrettyPrint();
		output.setEncoding("UTF-8");//输出编码utf-8
		
		//如果使用FileWriter仍然会出现乱码,所以要使用FileOutputStream
		//把我们的xml文件更新
		XMLWriter writer=new XMLWriter(new FileOutputStream(new File("src/classes.xml")),output);
		writer.write(document);
		writer.close();
	}
	
	


	//如何指定读取某个元素(读取第一个学生的信息)
	public static void read(Document document){
		//得到根元素
		Element root=document.getRootElement();
		//root.elements("stu"):表示取出root元素下的所有学生元素
		//get(0)表示取出第一个
		Element stu=(Element) root.elements("stu").get(0);
	//	System.out.println(stu.element("name").getText());
	// 或者
		System.out.println(((Element)stu.elements("name").get(0)).getText());
	
		Element stu1 =(Element) root.elements().get(0);
		System.out.println("取出stu的hobby属性"+stu1.attributeValue("hobby"));
		
		//不能直接跨层取值
	}
	
	
	
	//遍历我们的xml文件
	public static void list(Element element){
		System.out.println(element.getName()+element.getTextTrim());
		Iterator iterator=element.elementIterator();
		while(iterator.hasNext()){
			Element e=(Element) iterator.next();
			//递归
			list(e);
		}
		
	}
}


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

<class> 
  <stu> 
    <name 别名="hello world">林青霞</name>  
    <sex>女</sex>  
    <age>41</age>  
    <intro>是一个好学生</intro> 
  </stu>  
  <stu> 
    <name 别名="hello world">林青霞</name>  
    <sex>女</sex>  
    <age>61</age>  
    <intro>是一个好学生</intro> 
  </stu> 
</class>


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值