使用dom4j工具包实现对xml文件的增删改查和乱码问题的处理

 

使用dom4j工具包实现对xml文件的增删改查,xml文件为:

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

<书架> 
  <书> 
    <书名 name="the daught of sea">海的女儿</书名>  
    <作者>安徒生</作者>  
    <售价>50.0元</售价> 
  </书>  
  <书> 
    <书名>卖火柴的小女孩</书名>  
    <作者>安徒生</作者>  
    <售价>28.0元</售价> 
  </书> 
</书架>


 

实现代码为:

package com.java.dom;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

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 org.junit.Test;

public class DomParse {
	
	@Test
	public void find() throws DocumentException {
		//创建读取器
		SAXReader reader = new SAXReader();
		//将读取的结果放在document中
		Document doc = reader.read(new File("src/books.xml"));
		//得到根节点
		Element root = doc.getRootElement();
		Element book = (Element) root.elements("书").get(0);
		String value = book.element("书名").attributeValue("name");
		System.out.println(value);
		
		
	}
    
	@Test
	public void add() throws DocumentException, IOException {
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("src/books.xml"));
		Element root = doc.getRootElement();
		Element book = (Element) root.elements("书").get(0);
		book.addElement("售价").setText("39.0元");
		
		//创建一个漂亮的输出器
		OutputFormat format = OutputFormat.createPrettyPrint();
		//设置输出器的码表
		format.setEncoding("gb2312");
		XMLWriter writer = new XMLWriter(new FileOutputStream("src/books.xml"),format);
		//将更改的xml文件写回
		writer.write(doc);
	}
	
    @Test
	public void delete() throws DocumentException, IOException {
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("src/books.xml"));
		Element root = doc.getRootElement();
		Element book = (Element) root.elements("书").get(1);
		Element price = (Element) book.elements("售价").get(0);
		book.remove(price);
		
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("gb2312");
		XMLWriter writer = new XMLWriter(new FileOutputStream("src/books.xml"),format);
		writer.write(doc);
		
	}
	
    @Test
	public void modify() throws DocumentException, IOException {
		SAXReader reader = new SAXReader();
		Document doc = reader.read(new File("src/books.xml"));
		Element root = doc.getRootElement();
		Element book = (Element) root.elements("书").get(0);
		Element price = (Element) book.elements("作者").get(0);
		price.setText("Hello");
		
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("gb2312");
		XMLWriter writer = new XMLWriter(new FileOutputStream("src/books.xml"),format);
		writer.write(doc);
    }
		
}
	


 

运行结果为:

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

<书架> 
  <书> 
    <书名 name="the daught of sea">海的女儿</书名>  
    <作者>Hello</作者>  
    <售价>50.0元</售价>  
    <售价>39.0元</售价> 
  </书>  
  <书> 
    <书名>卖火柴的小女孩</书名>  
    <作者>安徒生</作者> 
  </书> 
</书架>

乱码问题通过OutputFormat类来解决,根据xml文件中使用的码表,设置输出器的码表,而且XM4LWrite中的参数第一个为字节输出,也可使用可更改码表的字符输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值