XML解析有两种方式:SAX,DOM
SAX:simple api for xml,解析XML的简单API,特点是内存占用少,速度快,但由于是逐行扫描式解析,对整体结构没有把控,不能修改XML内容
*
DOM:document object model,文档对象模型。特点是解析XML时会将XML结构建成 一棵树然后通过遍历树的形式解析xml内容,由于对整体结构有把控,可修改XML内容,但是由于会内建整棵树,因此内存占用多,速度慢。
W3C推荐使用DOM解析
*
- DOM4J dom for java
使用dom解析XML的步骤
1.创建SAXReader
2.使用SAXReader读取XML文档并生成Document对象(内建树的过程)
3.获取根元素
4.通过根元素开始按照XML的结构逐级获取子元素以达到遍历XML的目的
public class ParseXmlDemo {
public static void main(String[] args) {
/*
* 使用dom解析XML的步骤
* 1.创建SAXReader
* 2.使用SAXReader读取XML文档并生成Document对象(内建树的过程)
* 3.获取根元素
* 4.通过根元素开始按照XML的结构逐级获取子元素以达到遍历XML的目的
*/
try{
//1
SAXReader reader = new SAXReader();
//2
Document doc = reader.read(new File("./emplist.xml"));
/*3获取根元素
* Element 类的每一个实例用于表示XML文档中的一个元素(一堆标签)
* 通过Element可以获取表示的这对标签的相关信息,常有操作:
*
* String geyName()
* 获取当前标签的名字
*
* String getText()
* 获取当前标签中的文本
*
* Element element(String name)
* 获取当前标签下指定名字的子标签
*
* List elements()
* 获取当前标签下的所有子标签
*
* List element(String name)
* 获取当前标签下的所有同名子标签(指定的名字)
*/
Element root = doc.getRootElement();
System.out.println(root.getName());//输出根标签的名字
/*
* 将emplist.xml文件中的所有员工信息读取出来并存入一个集合
*/
List<Emp> emplist = new ArrayList<>();
//从List标签下获取所有的emp标签
List<Element>list = root.elements("emp");
System.out.println(list.size());
//遍历每一个<emp>标签
for(Element e:list){
//获取该员工的名字
//1.先获取<emp>标签下名为<name>的子标签
Element nameEle = e.element("name");
//2.获取标签中间文本
String name = nameEle.getTextTrim();
System.out.println(name);
//获取年龄
int age = Integer.parseInt(
// e.element("age").getTextTrim()
//elementTextTrim方法是获取当前标签下指定名字子标签中间的文本
e.elementTextTrim("age")
);
System.out.println(age);
//获取性别
String gender = e.elementTextTrim("gender");
//获取工资
int salary = Integer.parseInt(
e.elementTextTrim("salary")
);
//获取<emp>标签中的属性id的值
// Attribute attr = e.attribute("id");
// int id = Integer.parseInt(
// attr.getValue()
// );
// int id = Integer.parseInt(e.attribute("id").getValue());
//attributeValue方法用来获取当前标签下指定名字的属性对应的值
int id = Integer.parseInt(
e.attributeValue("id")
);
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();
}
}
}