dom4j是一个易用的、开源的库,可以实现对xml文档的解析,使用起来非常方便。
现在有这样一个简单的xml文档:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students [
<!ELEMENT students (student*)>
<!ELEMENT student (id,name,age)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ATTLIST student sex (男|女) "男">
]>
<students>
<student sex="男">
<id>1</id>
<name>张三</name>
<age>20</age>
</student>
<student sex="女">
<id>2</id>
<name>陈吉吉</name>
<age>20</age>
</student>
<student sex="男">
<id>3</id>
<name>李四</name>
<age>19</age>
</student>
</students>
下面使用java代码来进行解析:
package com.wzj.test;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class TestMain {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args){
try {
//1.获取项目的根路径
File directory=new File("");
String path=directory.getCanonicalPath();
//2.读取xml文件,获取Document对象
SAXReader reader=new SAXReader();
Document document=reader.read(new File(path+"/src/Student.xml"));
//3.获取根节点——即students
Element root=document.getRootElement();
//4.获取根节点下的所有名为student的子节点集合
List<Element> student=root.elements("student");
//5.遍历每个student元素(对象)
for (Element item : student) {
System.out.println("------------------");
//6.获取节点下的属性(student的sex属性)
Attribute sex=item.attribute("sex");
//7.获取属性值(sex的属性值)
System.out.println("学生性别:"+sex.getText());
//或者直接这样,里面有很多方法,可以自己查看练习
// System.out.println("学生姓名:"+item.attributeValue("sex"));
//8.获取节点下的子节点元素(student下的单个节点元素——id)
Element id=item.element("id");
//9.获取节点元素的文字(id节点的文本)
System.out.println("学生编号:"+id.getText());
//或者直接这样
// System.out.println(item.elementText("id"));
//10.添加子节点(在student节点下再添加一个address节点)
Element address=item.addElement("address");
//11.设置节点文字
address.setText("地址"+id.getText());
//12.设置节点属性和属性值
address.addAttribute("city", "北京");
//13.删除某节点
// item.remove(address);
System.out.println("学生姓名:"+item.elementText("name"));
System.out.println("学生年龄:"+item.elementText("age"));
System.out.println("------------------");
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
遍历元素时也可以这样遍历:
for(Iterator it=student.iterator();it.hasNext();){
Element e=(Element)it.next();
//...
}
遍历某节点下的所有属性:
for(Iterator it=root.attributeIterator();it.hasNext();){
Attribute a=(Attribute)it.next();
}