dom4j是1个Java的XML API,类似于jdom,用来读写XML文件的。我们说Dom4j是1个框架,框架就是很多很多类的集合,它整合了DOM思想,将文档中的所有内容创建成对象放到内存中,利用事件驱动来对XML实现不同的操作。
1.Dom4j的引入
使用Dom4j时,必须首先引入dom4j.jar,如果使用到了它的拓展功能,还需要引入jaxen⑴.1-beta⑹.jar。
2.对XML的操作
要想实现对XML的操作,首先必须读取到XML文档:
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/student.xml"));
①查询
//1取得根元素
Element root = document.getRootElement();
//2遍历根元素下student的子元素
Iterator<Element> it = root.elementIterator("student");
while(it.hasNext()){
Element studentEle = it.next();
//3取得number属性
String number =studentEle.attributeValue("number");
String name = studentEle.elementText("name");
String age = studentEle.elementText("age");
String sex = studentEle.elementText("sex");
}
②添加
//1获得students根元素
Element root = document.getRootElement();
//2添加学生元素
Element student = root.addElement("student").addAttribute("number", "ITCAST_003");
//3增加子元素
student.addElement("name").addText("Fanny");
student.addElement("age").addText("23");
student.addElement("sex").addText("female");
//4将新添加的写回到文档中
//1>创建格式化器
OutputFormat format = OutputFormat.createPrettyPrint();
//2>创建写入器
XMLWriter writer = new XMLWriter(new FileWriter("src/studentcopy.xml"),format);
//3>写入文件
writer.write(document);
//4>关闭资源
writer.close();
③删除
//1.获得根元素
Element root = document.getRootElement();
//2.遍历student的子元素
//2.1>方法1
Iterator<Element> it = root.elementIterator("student");
while(it.hasNext()){
Element studentEle = it.next();
String number = studentEle.attributeValue("number");
if(number == "jerry"){
it.remove();
}
}
//2.2方法2
List<Element> list = root.elements("student");
for(int i = 0; i < list.size(); i++){
Element studentEle = list.get(i);
//3.判断学号是不是等于被删除学生,是的话就履行删除
if("itcast_0001".equals(studentEle.attribute("number"))){
studentEle.getParent().remove(studentEle);
break;
}
}
//3.保存到文档
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileOutputStream("src/studentDel.xml"),format);
writer.write(document);
writer.close();
总结:
在学习Dom4j的进程中,感觉很像学习js的时候对DOM的操作,实际上,Dom4j也正是在DOM的基础上实现对XML的操作的,所以这1块的学习1定要和之前的HTML DOM结合起来,会事半功倍的。