`
hellojim
  • 浏览: 53352 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用dom4j包操作xml文件

    博客分类:
  • JAVA
阅读更多

最近使用 dom4j包来操作了xml 文件,具体有 search, add, modi,del 操作,下面将一个 javaBean 展示出来给大伙看看。

package com.jim.beans;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class DepartmentBean {
	
	private String ID;   //主键,没有任何意义
	private String bh;   //部门编号
	private String name; //部门名称
	private String tel;  //部门电话
	private String address;  //部门地址
	
	private File file;   //要读取的 xml文件
	
	
	public DepartmentBean() {
		
	}
	
	public DepartmentBean(File file) {
		this.file = file;
	}
	
	public DepartmentBean(String id, String bh, String name, String tel, String address) {
		
		ID = id;
		this.bh = bh;
		this.name = name;
		this.tel = tel;
		this.address = address;
	}
	
	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public String getBh() {
		return bh;
	}

	public void setBh(String bh) {
		this.bh = bh;
	}

	public String getID() {
		return ID;
	}

	public void setID(String id) {
		ID = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getTel() {
		return tel;
	}

	public void setTel(String tel) {
		this.tel = tel;
	}
	
	//查询若干个部门 支持模糊查询
	public ArrayList search(String attrName,String attrValue) throws DocumentException {
		
		ArrayList al = new ArrayList();
		List list = null;
		//File f = new File("d:\\department.xml"); //把要解析的xml文件包装成File类型
		SAXReader saxReader = new SAXReader(); //加载XML文档
		saxReader.setEncoding("UTF-8");
		Document document = saxReader.read(this.file);
		
		/* 采用了 dom4j 支持 xPath 这个用法 */
		if((attrName == null || attrName.trim().equals(""))
				||(attrValue == null || attrValue.trim().equals(""))) { 
			list = document.selectNodes("/departments/department");
		}else {
			//[注]: 下面这句采用的是 精确查询 等效于 某个属性=值
			//list = document.selectNodes("/departments/department[@"+attrName+"='"+attrValue+"']");
			//[注]: 下面这句采用的是 模糊查询 等效于 某个属性 like %值%
			list = document.selectNodes("/departments/department[contains(@"+attrName+",'" + attrValue + "')]");
		}
		
		Iterator iterator = list.iterator();
		DepartmentBean departmentBean = null;
		while(iterator.hasNext()) {
			
			Element element = (Element)iterator.next();
			departmentBean = new DepartmentBean();
			departmentBean.setID(element.attributeValue("id"));
			departmentBean.setBh(element.attributeValue("bh"));
			departmentBean.setName(element.attributeValue("name"));
			departmentBean.setTel(element.attributeValue("tel"));
			departmentBean.setAddress(element.attributeValue("address"));
			
			al.add(departmentBean);
		}
		return al;
	}
	//查询某个部门
	public DepartmentBean getDepartment(String attrName,String attrValue) throws DocumentException {
		
		ArrayList al = search(attrName,attrValue);
		if(al != null && al.size() > 0) {
			return (DepartmentBean)al.get(0);
		}else {
			return null;
		}
	}
	
	//添加部门
	public void add(DepartmentBean newDepartmentBean)  throws DocumentException, IOException {
		
		
		Document document = DocumentHelper.createDocument();
		//创建根节点,并返回要节点
		Element departmentsElement = document.addElement("departments");
		departmentsElement.addComment("所有的部门信息");
		
		//向根节点departments中加入department子节点
		Element departmentElement =  null;
		
		departmentElement =	departmentsElement.addElement("department");
		departmentElement.addAttribute("id",newDepartmentBean.getID());
		departmentElement.addAttribute("bh",newDepartmentBean.getBh());
		departmentElement.addAttribute("name",newDepartmentBean.getName());
		departmentElement.addAttribute("tel",newDepartmentBean.getTel());
		departmentElement.addAttribute("address",newDepartmentBean.getAddress());
		
		
		//File f = new File("d:\\department.xml"); //把要解析的xml文件包装成File类型
		SAXReader saxReader = new SAXReader(); //加载XML文档
		saxReader.setEncoding("UTF-8");   
		Document documentRead = saxReader.read(this.file);
		List list = documentRead.selectNodes("/departments/department");
		Iterator iterator = list.iterator();
		
		while(iterator.hasNext()) {
			
			departmentElement =	departmentsElement.addElement("department");
			Element element = (Element)iterator.next();
			
			Attribute attrID = element.attribute("id");
			departmentElement.addAttribute("id",attrID.getValue());
			
			Attribute attrBh = element.attribute("bh");
			departmentElement.addAttribute("bh",attrBh.getValue());
			
			Attribute attrName = element.attribute("name");
			departmentElement.addAttribute("name",attrName.getValue());
			
			Attribute attrTel = element.attribute("tel");
			departmentElement.addAttribute("tel",attrTel.getValue());
			
			Attribute attrAddress = element.attribute("address");
			departmentElement.addAttribute("address",attrAddress.getValue());
		}
		
		//把修改后document写到原有的department.xml文件,以覆盖原有的department.xml文件
		XMLWriter output = new XMLWriter(new OutputStreamWriter(new FileOutputStream(this.file),"UTF-8"));
		output.write(document);
		output.close();
		
	}
	
	//编辑部门
	public void edit(String attrName,String attrValue,DepartmentBean newDepartmentBean)  throws DocumentException, IOException {
		
		//File f = new File("d:\\department.xml"); //把要解析的xml文件包装成File类型
		SAXReader saxReader = new SAXReader(); //加载XML文档
		saxReader.setEncoding("UTF-8");   
		Document document = saxReader.read(this.file);
		List list = null;
		Iterator iterator = null;
		if((attrName == null || attrName.trim().equals(""))
				||(attrValue == null || attrValue.trim().equals(""))) { //如果设置的修改条件为 null ,则什么也不做
			return ;
		}else {
			list = document.selectNodes("/departments/department[@"+attrName+"='"+attrValue+"']");
		}
		
		if(list == null || list.size() == 0) { //如果设置的修改条件没有符合的记录,则什么也不做
			return ;
		}else {
			iterator = list.iterator();
			while(iterator.hasNext()) {
				
				Element e = (Element) iterator.next();
				Attribute attrB = e.attribute("bh");
				attrB.setValue(newDepartmentBean.getBh());
				Attribute attrN = e.attribute("name");
				attrN.setValue(newDepartmentBean.getName());
				Attribute attrT = e.attribute("tel");
				attrT.setValue(newDepartmentBean.getTel());
				Attribute attrA = e.attribute("address");
				attrA.setValue(newDepartmentBean.getAddress());
			}
		}
		
		//把修改后document写到原有的department.xml文件,以覆盖原有的department.xml文件
		XMLWriter output = new XMLWriter(new OutputStreamWriter(new FileOutputStream(this.file),"UTF-8"));
		output.write(document);
		output.close();
	}
	
	//删除部门
	public void del(String attrName,String attrValue) throws DocumentException, IOException {
		
		//File f = new File("d:\\department.xml"); //把要解析的xml文件包装成File类型
		SAXReader saxReader = new SAXReader(); //加载XML文档
		saxReader.setEncoding("UTF-8");   
		Document documentRead = saxReader.read(this.file);
		Document documentWrite = null;
		List list = null;
		
		if((attrName == null || attrName.trim().equals(""))
				||(attrValue == null || attrValue.trim().equals(""))) { //如果设置的修改条件为 null ,则什么也不做
			return ;
		}else {
			list = documentRead.selectNodes("/departments/department[@"+attrName+"!='"+attrValue+"']");
		}
		
		documentWrite = DocumentHelper.createDocument();
		Element departmentsElement = documentWrite.addElement("departments");
		departmentsElement.addComment("所有的部门信息");
		
		if(list == null || list.size() == 0) { //如果是全删除了,则什么也不做
			
			//把修改后document写到原有的department.xml文件,以覆盖原有的department.xml文件
			XMLWriter output = new XMLWriter(new OutputStreamWriter(new FileOutputStream(this.file),"UTF-8"));
			output.write(documentWrite);
			output.close();
			
			return ;
		}else {
			//向根节点departments中加入department子节点
			Element departmentElement =  null;
			Iterator iterator = list.iterator();
			
			while(iterator.hasNext()) {
				
				departmentElement = departmentsElement.addElement("department");
				
				Element element = (Element)iterator.next();
				
				Attribute attrID = element.attribute("id");
				departmentElement.addAttribute("id",attrID.getValue());
				
				Attribute attrBh = element.attribute("bh");
				departmentElement.addAttribute("bh",attrBh.getValue());
				
				Attribute attrName2 = element.attribute("name");
				departmentElement.addAttribute("name",attrName2.getValue());
				
				Attribute attrTel = element.attribute("tel");
				departmentElement.addAttribute("tel",attrTel.getValue());
				
				Attribute attrAddress = element.attribute("address");
				departmentElement.addAttribute("address",attrAddress.getValue());
			}
			//把修改后document写到原有的department.xml文件,以覆盖原有的department.xml文件
			XMLWriter output = new XMLWriter(new OutputStreamWriter(new FileOutputStream(this.file),"UTF-8"));
			output.write(documentWrite);
			output.close();
		}
	}
	//得到 xml 文件中最大的主键值 + 1
	public int getMaxID() throws DocumentException {
		
		SAXReader saxReader = new SAXReader(); //加载XML文档
		saxReader.setEncoding("UTF-8");
		Document document = saxReader.read(this.file);
		
		List list = document.selectNodes("/departments/department");
		Iterator iterator = null;
		int max = 0;
		
		if(list == null || list.size() == 0) {
			max = 0;
		}else {
			
			iterator = list.iterator();
			while(iterator.hasNext()) {
				
				Element element = (Element)iterator.next();
				String maxStr = element.attributeValue("id");
				int maxInt = Integer.parseInt(maxStr);
				if(maxInt > max) {
					max = maxInt;
				}
			}
		}
		return max + 1;
	}
	
	public static void main(String[] args) throws DocumentException, IOException {
		
		File f = new File("d:\\department.xml");
		DepartmentBean db = new DepartmentBean(f);
		System.out.println(db.getMaxID());
		//大家可以在这里写一些调用上面的 search ,add , del , edit 方法代码来测试测试,department.xml 文件在附件中已上传了此外还要要到两个特殊的包一个名叫jaxen-1.1.1.jar,还有一个叫dom4j-1.6.1.jar大家可以自己下载
	}
}

 

4
2
分享到:
评论

相关推荐

    DOM4j操作xml文件

    DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件DOM4j操作xml文件

    DOM4J jar包 xml解析 所有的dom4j-1.6.1 dom4j-2.0.2 dom4j-2.1.1包 导入直接使用

    在项目中使用DOM4J时,只需将相应的jar包(如dom4j-1.6.1.jar、dom4j-2.0.2.jar或dom4j-2.1.1.jar)导入到类路径中,即可开始利用其功能处理XML文档。导入后,可以按照DOM4J提供的API进行编程,快速实现XML的读写...

    使用Maven管理项目,实现DOM4j操作XML文件

    2. **创建XML文件**:使用DOM4j创建一个新的XML文件,这通常涉及到`Document`、`Element`和`Writer`的使用。例如,你可以创建一个包含根元素和子元素的XML文件。 3. **动态创建XML节点**:在已有的XML文档中动态...

    读写超大类xml文件,使用dom4j读写xml文件的工具类

    基于dom4j的读写xml文件的工具包。封装了dom4j操作xml文档的常和方法。 支持两种读写方法。1:针对小文件的读取整个文档,2:针对大文件的,逐行读取。读到几百M文件毫无压力。

    dom4j解析xml详解

    DOM4J的核心优势之一在于其丰富的接口体系,这些接口定义在`org.dom4j`包内,提供了对XML文档进行读写、查询、修改等操作的能力。 1. **Attribute**: 代表XML中的属性,可用于获取和设置属性值。 2. **Branch**: ...

    dom4j读写xml文档实例

    要使用DOM4J读取XML文档,首先需要创建一个`SAXReader`对象,然后调用`read`方法传入XML文件路径。这将返回一个`Document`对象,我们可以从中获取所有元素信息。 ```java File file = new File("path_to_xml_file")...

    dom4j解析xml文件的压缩包

    为了使用这个库,你需要将该jar包添加到项目的类路径中,然后就可以通过DOM4J提供的类和方法来解析和操作XML文件了。 总之,DOM4J是一个功能强大的XML处理库,无论是在小型项目还是大型系统中,都能发挥其优势,...

    XSD使用dom4j校验XML

    本篇文章将深入探讨如何利用DOM4J库来实现XSD对XML文档的校验,以确保XML文件符合预先设定的数据结构规则。 首先,理解XSD的作用至关重要。XSD文件定义了XML文档的元素、属性、数据类型以及它们之间的关系。通过...

    使用dom4j和jaxen解析xml

    在Java开发中,dom4j和jaxen是两个常用的库,用于解析和操作XML文档。 **dom4j** 是一个非常灵活且功能强大的Java XML API,它提供了全面的XML解决方案,包括XML的读取、写入、修改以及XPath查询等功能。dom4j的...

    使用dom4j进行解析XML

    如果不使用Maven,可以下载dom4j的jar包并将其添加到项目的类路径中。 接下来,我们将逐步创建一个XML文档: 1. **创建Document对象**:这是XML文档的根节点,可以通过`DocumentFactory`的`createDocument()`方法...

    dom4j---xml解析jar包

    与传统的DOM API相比,DOM4J更注重Java集合框架的集成,使得操作XML文档更加直观和高效。DOM4J的主要特点包括: 1. **面向对象的设计**:DOM4J将XML元素、属性、文本等都封装为Java对象,通过这些对象可以直接进行...

    dom4j操作xml

    在实际项目中,`testPuke`文件可能是测试用例,包含使用DOM4J进行XML操作的代码示例。通过运行这些示例,你可以更好地理解和掌握DOM4J的用法。DOM4J的灵活性和易用性使其成为Java开发中处理XML的首选工具之一,无论...

    DOM4J格式化XML

    3. **DOM4J解析XML**:介绍如何使用DOM4J读取XML文件并创建Document对象,解析XML元素和属性。 4. **DOM4J格式化API**:详述DOM4J库中用于格式化XML的类和方法,如`DocumentHelper.formatDocument()`或`Element....

    使用dom4j操作xml

    ### 使用dom4j操作XML详解 #### 一、DOM4j简介与配置 **DOM4j** 是一款专为Java平台设计的开源XML解析处理工具。它的设计充分考虑了性能和易用性,同时提供了对DOM、SAX及JAXP等标准的支持,因此非常适合进行复杂...

    Dom4J生成XML的完整方法希望大家能用到

    本文将深入探讨如何使用Dom4J库来创建XML文档,包括初始化文档、添加元素、设置属性、插入文本以及最终保存文档至文件系统。 #### 一、Dom4J简介 Dom4J(Document Object Model for Java)是一款开源的、轻量级的...

    dom4j自动解释xml文件

    在这个主题中,我们将深入探讨DOM4J如何递归地解析XML文件,并将解析结果映射到动态bean或Map中。 首先,让我们了解XML的基本概念。XML(Extensible Markup Language)是一种标记语言,常用于存储和传输结构化数据...

    dom4j解析xml文件(增删改查)

    在“dom4j解析xml文件(增删改查)”这个主题中,我们将深入探讨如何使用DOM4J来实现XML文档的四种基本操作:增加元素、删除元素、更新元素内容以及查询元素。 首先,让我们了解DOM4J的基本用法。在解析XML文件时,...

Global site tag (gtag.js) - Google Analytics