XML——XML解析之DOM4J
首先为什么会有Dom4j呢?
1.DOM4J介绍
2.DOM4J案例依然使用我们之前的XML文件: <?xml version="1.0" encoding="utf-8" standalone="no"?>
<班级>
<学生 地址="香港">
<名字>周小星</名字>
<年龄>23</年龄>
<介绍>学习刻苦</介绍>
</学生>
<学生 地址="澳门">
<名字>林晓</名字>
<年龄>25</年龄>
<介绍>是一个好学生</介绍>
</学生>
</班级>
该文档放在 使用DOM4J也要获取代表整个文档 在主方法中获取Document对象如下: // 1.得到一个解析器
SAXReader saxReader = new SAXReader();
// 2.指定解析哪个XML文件
Document document = saxReader.read(new File("src/com/dom4j/test/myClass.xml"));
然后我们就可以根据需求来写相应的方法,在主方法中调用。 【1】指定读取某个元素(读取第一个学生的信息) public static void read(Document document) {
// 得到根元素
Element root = document.getRootElement();
// root.elements("学生"):表示取出root下的所有学生元素
// root.element("学生"):表示取出root下的第一个学生元素
Element student = root.element("学生");
// 取出属性
String address = student.attributeValue("地址");
// 取出各个子节点的值
String name = student.element("名字").getText();
String age = student.element("年龄").getText();
String intro = student.element("介绍").getText();
System.out.println(address);
System.out.println(name);
System.out.println(age);
System.out.println(intro);
}
【2】添加元素:添加一个学生信息到XML文档中 public static void add(Document document) throws Exception {
// 首先我们来创建一个学生节点对象
Element student = DocumentHelper.createElement("学生");
Element name = DocumentHelper.createElement("名字");
name.setText("小强");
Element age = DocumentHelper.createElement("年龄");
age.setText("22");
Element intro = DocumentHelper.createElement("介绍");
intro.setText("是一个三好学生");
// 把三个子元素加到student节点下
student.add(name);
student.add(age);
student.add(intro);
// 为学生添加属性
student.addAttribute("地址","大理");
// 将学生节点添加到根节点下
document.getRootElement().add(student);
// 更新xml文件,直接输出会出现中文乱码,要用OutputFormat
OutputFormat output = OutputFormat.createPrettyPrint();
// 设置输出的编码为utf-8
output.setEncoding("utf-8");
// 这里一定要用FileOutputStream字节流输出,不能用FileWriter,否则还会有乱码
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/com/dom4j/test/myClass.xml"),output);
xmlWriter.write(document);
xmlWriter.close();
}
添加学生到XML文档中,也需要在最后将内存中的Document对象写入相应的文件,不然所有的操作只是在内存中进行,并不会输出到文件中,这与DOM类似。 public static void update(Document document) throws Exception {
// 更新xml文件,直接输出会出现中文乱码,要用OutputFormat
OutputFormat output = OutputFormat.createPrettyPrint();
// 设置输出的编码为utf-8
output.setEncoding("utf-8");
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/com/dom4j/test/myClass.xml"),output);
xmlWriter.write(document);
xmlWriter.close();
}
【3】添加一个元素到指定位置 public static void addByIndex(Document document) throws Exception {
// 创建一个元素
Element newStu = DocumentHelper.createElement("学生");
newStu.setText("王小明");
// 得到所有学生的list
List allStudent = document.getRootElement().elements("学生");
allStudent.add(1,newStu);
update(document);
}
这里其实是直接在得到的 【4】删除一个元素或者删除这个元素的属性 public static void delete(Document document) throws Exception {
// 找到该元素
Element student = document.getRootElement().element("学生");
// 删除元素的某个属性
student.remove(student.attribute("地址"));
// 通过父节点删除节点
student.getParent().remove(student);
update(document);
}
【5】更新元素 public static void updateAgeAndAddress(Document document) throws Exception {
Element root = document.getRootElement();
List<Element> list = root.elements();
for (Element element : list) {
// 更新属性
element.addAttribute("地址","美国");
// 更新年龄子节点的值
Element e_age = element.element("年龄");
int age = Integer.parseInt(e_age.getTextTrim());
e_age.setText(String.valueOf(age + 1));
}
update(document);
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |