java读写XML文件 (DOM)
2015-09-25 09:44
519 查看
首先项目里添加2个jar包,jar包名如下:
dom4j-1.6.1.jar
jaxen-1.1.1.jar
emp.xml
myemp.xml
Emp.class
dom4j-1.6.1.jar
jaxen-1.1.1.jar
emp.xml
<?xml version="1.0" encoding="UTF-8"?> <list> <emp id="1"> <name>张三</name> <age>34</age> <gender>男</gender> <salary>3000</salary> </emp> <emp id="2"> <name>李四</name> <age>21</age> <gender>女</gender> <salary>4000</salary> </emp> <emp id="3"> <name>王五</name> <age>46</age> <gender>女</gender> <salary>6500</salary> </emp> <emp id="4"> <name>赵六</name> <age>28</age> <gender>男</gender> <salary>4400</salary> </emp> <emp id="5"> <name>钱七</name> <age>53</age> <gender>男</gender> <salary>12000</salary> </emp> </list>
myemp.xml
<?xml version="1.0" encoding="UTF-8"?> <list> <emp id="1"> <name>jack</name> <age>33</age> <gender>男</gender> <salary>5000</salary> </emp> <emp id="2"> <name>boss</name> <age>55</age> <gender>男</gender> <salary>55000</salary> </emp> <emp id="3"> <name>marry</name> <age>22</age> <gender>女</gender> <salary>3500</salary> </emp> <emp id="4"> <name>kate</name> <age>25</age> <gender>女</gender> <salary>6000</salary> </emp> <emp id="5"> <name>tom</name> <age>32</age> <gender>男</gender> <salary>8500</salary> </emp> </list>
Emp.class
package day20150924; /** * 该类用于描述emp.xml文件中表示的员工 * 子类方法具备多态(假设Person和Son都有age属性和run方法) * Person p = new Son(); * p.run();//调用子类方法 * 属性不具备多态 * p.age;//调用父类属性 */ public class Emp { private int id; private String name; private int age; private String gender; private int salary; public Emp(){} public Emp(int id, String name, int age, String gender, int salary) { super(); this.id = id; this.name = name; this.age = age; this.gender = gender; this.salary = salary; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } public int getSalary() { return salary; } public void setSalary(int salary) { this.salary = salary; } @Override public String toString() { return id+","+name+","+age+","+gender+","+salary; } }
package day20150924; import java.io.File; import java.util.ArrayList; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * 使用DOM解析XML文件 */ public class XMLDemo1 { public static void main(String[] args) { try{ /* * 解析XML文件的基本流程 * 1:创建SAXReader,用来读取XML文件 * 2:指定XML文件使得SAXReader读取,并解析文档对象Document * 3:获取根元素 * 4:获取每一个元素,从而达到解析的目的 */ //1:创建SAXReader,用来读取XML文件 SAXReader reader = new SAXReader();//带Reader都是字符流 //2:指定XML文件使得SAXReader读取,并解析文档对象Document File xmlFile = new File("emp.xml"); /* * 常用的读取方法: * Document read(InputStream in) * Document read(Reader read) * Document read(File file) * read方法的作用: * 读取给定的xml,并将其解析转换为一个Document对象, * 实际上这里已经完成了对整个xml的解析工作, * 并将所有的内容封装到了Document对象中。 * Document对象可以描述当前xml文档 */ Document doc = reader.read(xmlFile); //3:获取根元素,拿到list元素 Element root = doc.getRootElement(); //4 获取每个元素 /* * Element element(String name) * 获取当前标签下的第一个给定名字的标签 * * List elements(String name) * 获取当前标签下所有给定名字的标签 * * List elements() * 获取所有子标签 */ List<Element> elements = root.elements("emp"); /* * 创建集合,保存xml中每个用户的信息,然后创建Emp实例, * 将信息设置到该实例的相应属性上。 * 最终将所有emp对象存入该集合 */ List<Emp> list = new ArrayList<Emp>(); /* * 遍历每个emp标签 */ for(Element emp : elements){ Emp e = new Emp(); //解析emp标签 //获取name的值 Element ename = emp.element("name"); //获取前后标签中的文本 String name = ename.getTextTrim(); //获取年龄 /* * String elementText(String name) * 获取当前标签中给定名字的子标签中间的文本 * 该方法与上面取得name的两句话等效 */ int age = Integer.parseInt(emp.elementText("age")); String gender = emp.elementText("gender"); int salary = Integer.parseInt(emp.elementText("salary")); e.setName(name); e.setAge(age); e.setGender(gender); e.setSalary(salary); //获取id属性 Attribute attr = emp.attribute("id"); /* * Attribute表示一个属性,常用方法: * String getValue():获取该属性的值 * String getName():获取该属性的名字 */ int id = Integer.parseInt(attr.getValue()); e.setId(id); list.add(e); } System.out.println("解析了"+list.size()+"个员工信息"); for(Emp emp : list){ System.out.println(emp); } }catch(Exception e){ } } }
package day20150924; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.XMLWriter; /** * 使用DOM写出一个XML */ public class XMLDemo2 { public static void main(String[] args) { List<Emp> list = new ArrayList<Emp>(); list.add(new Emp(1,"jack",33,"男",5000)); list.add(new Emp(2,"boss",55,"男",55000)); list.add(new Emp(3,"marry",22,"女",3500)); list.add(new Emp(4,"kate",25,"女",6000)); list.add(new Emp(5,"tom",32,"男",8500)); /* * 生成一个xml的基本步骤: * 1:创建文档对象Document * 2:为Document创建根节点 * 3:为跟节点组建树状结构 * 4:创建XMLWriter * 6:写出XML */ //1:创建文档对象Document Document doc = DocumentHelper.createDocument(); //2:为Document创建根节点 /* * Document的方法 * Element addElement(String name) * 该方法用于向文档中添加给定名字的根元素,返回的Element实例就表示该根元素 * 注意:该方法只能调用一次,调用第二次会抛出异常 */ Element root = doc.addElement("list"); //循环添加每个员工信息 //for(int i=0;i<list.size();i++){} for(Emp e : list){ /* * Element同样支持方法: * Element addElement(String name) * 想当前标签中添加给定名字的子标签 */ //向根标签中添加emp标签 Element emp = root.addElement("emp"); //向emp标签中添加子标签name Element name = emp.addElement("name"); name.setText(e.getName());//setText:设置; AddText:现有内容上追加 emp.addElement("age").setText(e.getAge()+""); emp.addElement("gender").addText(e.getGender()); emp.addElement("salary").addText(e.getSalary()+""); /* * 为标签添加属性 * Element addAttribute(String name,String value) * 为当前标签添加名字和对应的值, * 返回值仍然是当前标签。 * 这样可以连续添加若干属性,就像StringBuilder的append的返回值效果和作用 */ emp.addAttribute("id", e.getId()+""); } /* * 当退出循环后,那么Document中的结构就构建完 了。 * 需要将其写出为xml */ try{ XMLWriter writer = new XMLWriter(); FileOutputStream out = new FileOutputStream("myemp.xml"); writer.setOutputStream(out); /* * 将Document对象写出到文件中, * 这时会将Document转换为xml格式,写入文件 */ writer.write(doc); }catch(Exception e){ } } }
package day20150924; import java.io.File; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * DOM4J对XPath的支持 */ public class XMLDemo3 { public static void main(String[] args){ try{ SAXReader reader = new SAXReader(); Document doc = reader.read(new File("myemp.xml")); // String path = "/list/emp[salary>5000]"; String path2 = "/list/emp/@id";//或者 "//@id" // String path = "/list/emp[gender='女']"; //String path = "/list/emp[gender='女']/salary"; String path = "/list/emp[gender='女']/salary[.>4000]"; /* * List selectNodes(String xpath) * 根据给定的XPATH查询对应的节点 */ List list = doc.selectNodes(path);//返回Element集合 List list2 = doc.selectNodes(path2);//返回Attribute集合 for(Object o : list){ Element e = (Element)o; String value = e.getStringValue(); System.out.println(value); } for(Object o : list2){ Attribute a = (Attribute)o; String value = a.getStringValue(); String name = a.getName(); System.out.println(name+",,,"+value); } }catch(Exception e){ } } }
相关文章推荐
- Maven 创建Spring MVC 工程简单例子
- 怎样查看Eclipse是32位还是64位
- 用java实现的自定义单向链表
- Spring工程中使用Gradle
- JPA多对一单向关联
- Java基础知识强化77:正则表达式之获取功能(Pattern 和 Matcher类的使用)
- SpringMVC @RequestBody接收Json对象字符串
- 解析Java的JVM以及类与对象的概念
- Java基础知识强化76:正则表达式之替换功能
- java web demo
- Java时间处理小结
- Servlet搭建-基于eclipse
- Java学习笔记【继承之类、超类、子类】
- Java基础知识强化75:正则表达式之分割功能(字符串中的数字排序案例)
- 了解Java 垃圾回收(GC)的基础
- javaWebSerivice学习篇3-WSDL文档分析
- 【笔记】Spring MVC学习指南(四)基于注解的控制器
- 积极主动敲代码,使用Junit学习Java程序设计
- JSP学习之Java Web中的安全控制实例详解
- Java Web开发之访问路径问题分析