Dom4j读写xml

本文介绍使用Dom4j库进行XML文件的读写操作。通过具体代码示例展示了如何创建XML文档、添加元素及属性,以及如何解析XML文档并提取数据。适用于初学者了解Java中XML处理的基本方法。

直接呈现代码,代码中有详细注释

Dom4jFirst.java

package com.bao; import java.io.File; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.Iterator; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; /** * 程序值得优化的地方:在Student中,根据数据的特点,college也应该是一个对象 */ public class Dom4jFirst { public static void main(String[] args) { try { writeXml(); } catch (Exception e) { System.out.println("写xml出现异常"); e.printStackTrace(); } ArrayList<Student> students = new ArrayList<Student>(); try { readXML("src/com/bao/studentInfo.xml", students); } catch (Exception e) { System.out.println("解析xml出现问题"); e.printStackTrace(); } Iterator<Student> iterator = students.iterator(); Student student = null; while (iterator.hasNext()) { student = iterator.next(); System.out.println(student); } } /** * 借助于Dom4j写xml文件是非常轻松的事情,总体思路就是首先构建根元素,然后根元素构建子元素。 * * 当然,子元素也可以构建自己的子元素 * @throws Exception */ public static void writeXml()throws Exception{ Document document = DocumentHelper.createDocument(); Element root = document.addElement("persons"); Element element_1 = root.addElement("person").addAttribute("age", "24"); element_1.addElement("name").addText("冯小卫"); element_1.addElement("性别").addText("男"); Element element_2 = root.addElement("person").addAttribute("age", "22"); element_2.addElement("name").addText("秦珊珊"); element_2.addElement("性别").addText("女"); XMLWriter writer = new XMLWriter(new FileOutputStream("persons.xml")); writer.write(document); writer.close(); } /** * *Dom4j解析xml例子 * *解析思路: * *首先获取根元素root,然后通过root元素获取root子元素的遍历器。 * *得到遍历器以后,移动到第一个子元素上,解析参数。 * *解析参数结束以后,开始解析这个子元素的子元素。 * * */ /** * 遍历整个XML文件,获取所有节点的值与其属性的值,并放入ArrayList中 * * @param filename * String 待遍历的XML文件(相对路径或者绝对路径) */ @SuppressWarnings("unchecked") public static void readXML(String filename, ArrayList<Student> students) throws Exception { SAXReader saxReader = new SAXReader(); Document document = saxReader.read(new File(filename)); Element root = document.getRootElement();// 获取根元素 Iterator<Element> iter = root.elementIterator(); Student student = null; Element element = null; Attribute ageAttr = null; Attribute leaderAttr = null; while (iter.hasNext()) { student = new Student(); element = iter.next(); ageAttr = element.attribute("age"); if (ageAttr != null) { String age = ageAttr.getValue(); if (age != null && !age.equals("")) { student.setAge(age); } else { student.setAge(20 + ""); } } else { student.setAge(20 + ""); } Iterator<Element> iterInner = element.elementIterator(); while (iterInner.hasNext()) { Element elementInner = iterInner.next(); if (elementInner.getName().equals("college")) { student.setCollege(elementInner.getText()); leaderAttr = elementInner.attribute("leader"); if (leaderAttr != null) { String leader = leaderAttr.getValue(); if (leader != null && !leader.equals("")) { student.setLeader(leader); } else { student.setLeader("leader"); } } else { student.setLeader("leader"); } } else { if (elementInner.getName().equals("name")) { student.setName(elementInner.getText()); } else if (elementInner.getName().equals("telephone")) { student.setTelephone(elementInner.getText()); } else if (elementInner.getName().equals("notes")) { student.setNotes(elementInner.getText()); } } } students.add(student); } } }


Student.java

package com.bao; public class Student { private String age; private String name; private String college; private String telephone; private String notes; private String leader; public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCollege() { return college; } public void setCollege(String college) { this.college = college; } public String getTelephone() { return telephone; } public void setTelephone(String telephone) { this.telephone = telephone; } public String getNotes() { return notes; } public void setNotes(String notes) { this.notes = notes; } public void setLeader(String leader) { this.leader = leader; } public String getLeader() { return leader; } @Override public String toString() { return "age:" + getAge() + " collage:" + getCollege() + " leader:" + getLeader() + " name:" + getName() + " notes:" + getNotes() + " tel:" + getTelephone(); } }

studentInfo.xml

<?xml version="1.0" encoding="gb2312"?> <students> <student age="25"><!--如果没有age属性,默认的为20--> <name>崔卫兵</name> <college>PC学院</college> <telephone>62354666</telephone> <notes>男,1982年生,硕士,现就读于北京邮电大学</notes> </student> <student> <name>cwb</name> <college leader="学院领导">PC学院</college><!--如果没有leader属性,默认的为leader--> <telephone>62358888</telephone> <notes>男,1987年生,硕士,现就读于中国农业大学</notes> </student> <student age="45"> <name>xxxxx</name> <college leader="">xxx学院</college> <telephone>66666666</telephone> <notes>注视中,注释中</notes> </student> <student age=""> <name>lxx</name> <college>yyyy学院</college> <telephone>88888888</telephone> <notes>注视中111,注释中222</notes> </student> </students>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值