TestXml2.java:
classes.xml:
package com.hyj;
import java.io.*;
import java.util.Iterator;
import java.util.List;
import org.dom4j.*;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class TestXml2 {
//使用dom4j对xml文件进行crud操作
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//1.得到解析器
SAXReader saxReader=new SAXReader();
//2.指定解析哪个xml文件
Document document=saxReader.read(new File("src/classes.xml"));
// list(document.getRootElement());//得到根元素
add(document);
}
//更新元素(要求:把所有学生的年龄全部+3)
public static void update(Document document) throws Exception{
//得到所有学生的年龄
List<Element> stus=document.getRootElement().elements("stu");
for(Element stu:stus){
int newAge=Integer.parseInt(stu.element("age").getText())+3;
stu.element("age").setText(newAge+"");
//更新属性
stu.element("name").addAttribute("别名", "hello world");
}
//更新
//直接输出会出现中文乱码
OutputFormat output=OutputFormat.createPrettyPrint();
output.setEncoding("UTF-8");//输出编码utf-8
//如果使用FileWriter仍然会出现乱码,所以要使用FileOutputStream
//把我们的xml文件更新
XMLWriter writer=new XMLWriter(new FileOutputStream(new File("src/classes.xml")),output);
writer.write(document);
writer.close();
}
//删除元素(要求:删除第一个学生)
public static void del(Document document) throws Exception{
//找到该元素
Element stu1=document.getRootElement().element("stu");
//删除元素的某个属性
Attribute attribute=stu1.element("name").attribute("别名");
// System.out.println(attribute.getValue());
stu1.element("name").remove(attribute);
//删除(元素)
// stu1.getParent().remove(stu1);
//更新
//直接输出会出现中文乱码
OutputFormat output=OutputFormat.createPrettyPrint();
output.setEncoding("UTF-8");//输出编码utf-8
//如果使用FileWriter仍然会出现乱码,所以要使用FileOutputStream
//把我们的xml文件更新
XMLWriter writer=new XMLWriter(new FileOutputStream(new File("src/classes.xml")),output);
writer.write(document);
writer.close();
}
//添加元素(要求添加一个学生到xml文件中)
public static void add(Document document) throws IOException{
//首先我们来创建一个学生节点对象 Node=Element
Element newStu=DocumentHelper.createElement("stu");
Element newStu_name=DocumentHelper.createElement("name");
//如何给元素添加属性
newStu_name.addAttribute("别名", "江江");
newStu_name.setText("宋江");
Element newStu_sex=DocumentHelper.createElement("sex");
Element newStu_age=DocumentHelper.createElement("age");
Element newStu_intro=DocumentHelper.createElement("intro");
//把三个子元素(节点)加到newStu下
newStu.add(newStu_name);
newStu.add(newStu_sex);
newStu.add(newStu_age);
newStu.add(newStu_intro);
//再把newStu节点加到跟元素下
// document.getRootElement().add(newStu);
//添加到指定位置
document.getRootElement().elements().add(0, newStu);
//直接输出会出现中文乱码
OutputFormat output=OutputFormat.createPrettyPrint();
output.setEncoding("UTF-8");//输出编码utf-8
//如果使用FileWriter仍然会出现乱码,所以要使用FileOutputStream
//把我们的xml文件更新
XMLWriter writer=new XMLWriter(new FileOutputStream(new File("src/classes.xml")),output);
writer.write(document);
writer.close();
}
//如何指定读取某个元素(读取第一个学生的信息)
public static void read(Document document){
//得到根元素
Element root=document.getRootElement();
//root.elements("stu"):表示取出root元素下的所有学生元素
//get(0)表示取出第一个
Element stu=(Element) root.elements("stu").get(0);
// System.out.println(stu.element("name").getText());
// 或者
System.out.println(((Element)stu.elements("name").get(0)).getText());
Element stu1 =(Element) root.elements().get(0);
System.out.println("取出stu的hobby属性"+stu1.attributeValue("hobby"));
//不能直接跨层取值
}
//遍历我们的xml文件
public static void list(Element element){
System.out.println(element.getName()+element.getTextTrim());
Iterator iterator=element.elementIterator();
while(iterator.hasNext()){
Element e=(Element) iterator.next();
//递归
list(e);
}
}
}
classes.xml:
<?xml version="1.0" encoding="UTF-8"?>
<class>
<stu>
<name 别名="hello world">林青霞</name>
<sex>女</sex>
<age>41</age>
<intro>是一个好学生</intro>
</stu>
<stu>
<name 别名="hello world">林青霞</name>
<sex>女</sex>
<age>61</age>
<intro>是一个好学生</intro>
</stu>
</class>