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