您的位置:首页 > 其它

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

2013-09-28 23:39 330 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: