import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
* DOM解析XML文档
* @author Administrator
*
*/
public class ParseXmlDemo {
public static void main(String[] args) {
try {
/*
* 解析步骤:
* 1:创建SAXReader
* 2:使用SAXReader解析xml文档,当
* 解析后,会生成一个Document类型的
* 实例,该实例则记录了xml文档中的
* 所有内容
* 3:通过Document对象获取根元素
* 4:从根元素开始,根据xml文档结构
* 逐级获取子元素,以到达获取xml文档
* 数据的目的
*/
//1
SAXReader reader = new SAXReader();
/*
* 2 这一步执行完毕后,xml文档的实际解析工作
* 就已经结束了,并且xml文档中的内容都记录在
* doc对象中了.
* 所以说dom解析慢,内存占用大都体现在这一个
* 环节.
*/
// reader.read(new File("emplist.xml"));
Document doc = reader.read(new FileInputStream("emplist.xml"));
/*
* 3 Document提供了获取根元素的方法
* Element getRootElement()
* 该方法返回一个Element的实例,而每一个
* Element的实例都表示xml文档中的一个
* 元素(标签)
* 这里获取的根元素就是emplist.xml文档
* 中的<list>标签.
*/
Element root = doc.getRootElement();
/*
* Element提供了获取子元素的相关方法
*
* Element element(String name)
* 获取指定名字的子元素,要是有多个获取第一个
*
* List elements()
* 获取所有子元素,返回的集合中含有若干个
* Element实例,每一个实例表示一个子元素
*
* List elements(String name)
* 获取所有同名的子元素.
*
*/
List<Element> list = root.elements();
List<Emp> empList = new ArrayList<Emp>();
/*
* 遍历<list>中的每一个<emp>标签
* 并将信息存入到一个Emp对象中,并
* 最终保存到empList集合
*/
for(Element empEle : list){
//获取<name>标签
Element nameEle = empEle.element("name");
/*
* Element还提供了一些获取标签
* 信息的常用方法:
* String getName()
* 获取当前标签的名字
*
* String getText()
* 获取当前标签中间的文本信息
*
* String getTextTrim()
*/
String name = nameEle.getText();
/*
* Element的方法:
* String elementText(String name)
* 该方法是获取当前标签下指定名字的子标签
* 中间的文本
*/
int age = Integer.parseInt(empEle.elementText("age"));
String gender = empEle.elementText("gender");
int salary = Integer.parseInt(empEle.elementText("salary"));
/*
* Element提供方法:
* Attribute attribute(String name)
* 获取当前标签中指定名字的属性.
* 返回值为Attribute的一个实例.
* Attribute的每一个实例用于表示某个
* 标签中的一个属性,其定义了两个常用方法:
* String getName():获取属性名
* String getValue():获取属性值
*/
Attribute attr= empEle.attribute("id");
int id = Integer.parseInt(attr.getValue());
Emp emp = new Emp(id, name, age, gender, salary);
empList.add(emp);
}
System.out.println("解析完毕!");
for(Emp e : empList){
System.out.println(e);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
/**
* 使用DOM生成XML文档
* @author Administrator
*
*/
public class WriteXmlDemo {
public static void main(String[] args) {
try {
List<Emp> empList = new ArrayList<Emp>();
empList.add(new Emp(1,"张三",22,"男",5000));
empList.add(new Emp(2,"李四",23,"女",6000));
empList.add(new Emp(3,"王五",24,"男",7000));
empList.add(new Emp(4,"赵六",25,"女",8000));
empList.add(new Emp(5,"钱七",26,"男",9000));
/*
* 生成XML文档的大致步骤:
* 1:创建一个表示空白文档的Document
* 对象
* 2:向Document对象中添加根元素
* 3:根据文档应当生成的结构逐级从根
* 元素开始添加子元素已达到目的.
* 4:创建XMLWriter
* 5:通过XMLWriter将Document对象
* 描述的结构写出成XML文档
* 6:将XMLWriter关闭
*/
//1
Document doc = DocumentHelper.createDocument();
/*
* 2 Document提供了方法:
* Element addElement(String str)
* 向当前文档中添加给定名字的根元素,该方法返回的
* Element实例即表示刚添加的根元素,以便后续向
* 该元素添加子元素完成文档结构.
* 需要注意,由于XML文档只能有一个根元素,所以
* 该方法不能调用两次以上,否则抛出异常
*/
Element root = doc.addElement("list");
//3
for(Emp emp : empList){
/*
* Element也提供了向当前标签添加
* 子标签的方法:
* Element addElement(String name)
*/
Element empEle = root.addElement("emp");
//添加name标签
Element nameEle= empEle.addElement("name");
/*
* Element addText(String text)
* 向当前标签中添加文本
*/
nameEle.addText(emp.getName());
//添加age
Element ageEle = empEle.addElement("age");
ageEle.addText(emp.getAge()+"");
//添加gender
Element genderEle = empEle.addElement("gender");
genderEle.addText(emp.getGender());
//添加salary
Element salaryEle = empEle.addElement("salary");
salaryEle.addText(String.valueOf(emp.getSalary()));
/*
* Element提供添加属性的方法:
* Element addAttribute(
* String name,String value
* )
*/
//添加id属性
empEle.addAttribute("id", emp.getId()+"");
}
//4
XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());
writer.setOutputStream(new FileOutputStream("myemp.xml"));
//5
writer.write(doc);
//6
writer.close();
System.out.println("写出完毕!");
} catch (Exception e) {
e.printStackTrace();
}
}
}