dom4j之创建xml、读取xml、修改xml

1. 官网 http://sourceforge.net/projects/dom4j/files/ 点击打开链接 下载dom4j的jar包与源码

2.建立一个java工程 将dom4j-1.6.1.jar添加到工程里面

3.编写测试代码 Dom4jTest.java

package com.undergrowth;



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

import org.dom4j.Attribute;
import org.dom4j.Document;
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 {

	/**
	 * @param args
	 */
	public static void createDocument(String pathString)
	{
		Document document=DocumentHelper.createDocument();
		Element studentsElement=document.addElement("students");
		//添加undergrowth学生信息
		//添加学生节点
		Element studentElement=studentsElement.addElement("student");
		//添加注释信息
		studentElement.addComment("添加undergrowth学生信息");
		//在学生节点下面添加姓名节点
		Element nameElement=studentElement.addElement("name");
		//设置姓名节点的文本信息为undergrowth
		nameElement.setText("undergrowth");
		//添加学生的地址节点并设置其内容为云南省昆明市
		studentElement.addElement("address").setText("云南省昆明市");
		//添加学生的班级节点 并设置班级节点的姓名属性
		Element gradeElement=studentElement.addElement("grade");
		gradeElement.addAttribute("name", "农业信息化");
		//在班级节点下面添加学院节点
		Element collegeElement=gradeElement.addElement("college");
		//设置学院节点的姓名属性 并添加一个人数子节点
		collegeElement.addAttribute("name", "基信学院");
		collegeElement.addElement("people").setText("1000");
		
		//添加john学生信息 添加过程与上面的是一致的 只是内容信息不同而已
		Element student2Element=studentsElement.addElement("student");
		student2Element.addComment("添加john学生信息");
		Element name2Element=student2Element.addElement("name");
		name2Element.setText("john");
		student2Element.addElement("address").setText("海南省海南市");
		Element grade2Element=student2Element.addElement("grade");
		grade2Element.addAttribute("name", "计算机");
		Element college2Element=grade2Element.addElement("college");
		college2Element.addAttribute("name", "信自学院");
		college2Element.addElement("people").setText("2000");
		
		try {
			//将设置好的文本写入到xml文件中 OutputFormat.createPrettyPrint()为输出格式的设置
			XMLWriter writer=new XMLWriter(new FileWriter(new File(pathString)),OutputFormat.createPrettyPrint());
			writer.write(document);
			writer.close();
			System.out.println("已创建student.xml");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void readDocument(String pathString)
	{
		SAXReader reader=new SAXReader(); //获取一个读取器
		try {
			//从文件中读取一个xml文件
			Document document=reader.read(new File(pathString));
			//获取根节点
			Element rootElement=document.getRootElement();
			//System.out.println(rootElement.asXML());
			//获取根节点下面的student子节点
			for(Iterator i=rootElement.elementIterator("student");i.hasNext();)
			{
				Element element=(Element) i.next();
				//获取student节点下面的子节点 并进行遍历
				Iterator jIterator=element.elementIterator();
					while(jIterator.hasNext())
					{
						
						Element element2=(Element) jIterator.next();
						//打印有属性的节点的属性名
						if(element2.attributeCount()!=0) {
							List<Attribute> attributes=element2.attributes();
							for(Attribute attribute:attributes)
								System.out.println(element2.getName()+"节点,属性有:"+attributes.size()+"个,属性名称为:"+attribute.getName()+",属性值为:"+attribute.getText());
						}
						//修改名为undergrowth的学生信息
						if(element2.getName().equals("name") && element2.getText().equals("undergrowth"))  
							{ 
							System.out.println("未修改前 "+element2.getName()+":"+element2.getText());
							element2.setText("james");
							System.out.println("修改后 "+element2.getName()+":"+element2.getText());
							}
					}
				
				
			}
			//将修改后的文本 重新写入到读取的文件中
			XMLWriter writer=new XMLWriter(new FileWriter(new File(pathString)), OutputFormat.createPrettyPrint());
			writer.write(document);
			writer.close();
			System.out.println("已修改student.xml");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		createDocument("student.xml");
		readDocument("student.xml");
	}

}


    上面代码都加了详细的注释 这里只是简单的解释一下  createDocument方法里面创建了一个xml文件 包含一个students根节点 两个student子节点 每个student子节点下面包含name,address,grade三个子节点 而grade子节点又包含colleage子节点 colleage 子节点又包含people子节点

   readDocument方法里面读取了生成的studnet.xml文件 并输出了有属性的节点的名称 属性的个数 还有属性的名称与属性值  并将name节点的文本名为undergrowth的名称修改为james


   如果生成的xml文件中文有乱码的话,将java工程的文本文件的编码格式改为utf-8





运行效果:



  未调用readDocument之前  student.xml 内容如下

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

<students>
  <student>
    <!--添加undergrowth学生信息-->
    <name>undergrowth</name>
    <address>云南省昆明市</address>
    <grade name="农业信息化">
      <college name="基信学院">
        <people>1000</people>
      </college>
    </grade>
  </student>
  <student>
    <!--添加john学生信息-->
    <name>john</name>
    <address>海南省海南市</address>
    <grade name="计算机">
      <college name="信自学院">
        <people>2000</people>
      </college>
    </grade>
  </student>
</students>


调用readDocument方法之后

student.xml 文件内容如下:

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

<students> 
  <student> 
    <!--添加undergrowth学生信息-->  
    <name>james</name>  
    <address>云南省昆明市</address>  
    <grade name="农业信息化"> 
      <college name="基信学院"> 
        <people>1000</people> 
      </college> 
    </grade> 
  </student>  
  <student> 
    <!--添加john学生信息-->  
    <name>john</name>  
    <address>海南省海南市</address>  
    <grade name="计算机"> 
      <college name="信自学院"> 
        <people>2000</people> 
      </college> 
    </grade> 
  </student> 
</students>

控制台输出信息如下:

已创建student.xml
未修改前 name:undergrowth
修改后 name:james
grade节点,属性有:1个,属性名称为:name,属性值为:农业信息化
grade节点,属性有:1个,属性名称为:name,属性值为:计算机
已修改student.xml


posted on 2013-09-28 23:39  liangxinzhi  阅读(283)  评论(0编辑  收藏  举报