/**
 * XML读写示例
 * @author hx
 *
 */
public class XmlReaderWriter{
    /**
     * 读取一个XML文件,返回一个雇员链表
     * @param fileName
     * @return
     */
    public List<Employee> readXml(String fileName){
        List<Employee> employees=new ArrayList<Employee>();

        SAXReader reader = new SAXReader();
        try {
            Document  document = reader.read(new File(fileName));
            Element root = document.getRootElement();

            List nodes = root.elements("employee");

            for (Iterator it = nodes.iterator(); it.hasNext();) {
                Employee employee=new Employee();

                // 根节点下的雇员子节点
                Element employeeElm = (Element) it.next();

                // 获取雇员子节点的id属性
                Attribute attribute=employeeElm.attribute("id");
                employee.setId(Long.parseLong(attribute.getText()));// 将文本形式的long字符串还原成基本类型

                // 获得雇员子节点的名称子节点
                Element nameElm=employeeElm.element("name");
                employee.setName(nameElm.getText());// 获取名称子节点的文字

                // 获取雇员子节点的性别子节点的文字
                employee.setMale(Boolean.parseBoolean(employeeElm.element("ismale").getText()));

                // 将雇员信息放入链表
                employees.add(employee);
            }

        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return employees;
    }

    /**
     * 将一个雇员链表写入XML文档
     * @param employees
     * @param fileName
     */
    public void writerToFile(List<Employee> employees,String fileName){
        // 创建文档对象
        Document document = DocumentHelper.createDocument();
        // 创建根节点
        Element root = document.addElement("employees");

        for(Employee emp:employees){
            // 创建employee节点
            Element empElm = root.addElement("employee");

            // 创建employee节点的id属性
            empElm.addAttribute("id", String.valueOf(emp.getId()));

            // 创建employee节点的子节点name
            Element nameElm = empElm.addElement("name");
            nameElm.setText(emp.getName());// 设置子节点的文字

            // 创建employee节点的子节点ismale
            Element ismaleElm = empElm.addElement("ismale");
            ismaleElm.setText(String.valueOf(emp.isMale()));// 设置子节点的文字
        }

        // 将document文档对象写入文件
        XMLWriter writer;
        try {
            writer = new XMLWriter(new FileWriter(fileName));
            writer.write(document);
            writer.close();

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public static void main(String[] args){
    List<Employee> employees=new ArrayList<Employee>();
        /*employees.add(new Employee(1,"Andy",true));
        employees.add(new Employee(2,"Bill",false));
        employees.add(new Employee(3,"Cindy",true));
        employees.add(new Employee(4,"Doutglas",false));

        XmlReaderWriter xmlReaderWriter=new XmlReaderWriter();
        xmlReaderWriter.writerToFile(employees, "Employees20140724.xml");*/

        XmlReaderWriter xmlReaderWriter=new XmlReaderWriter();
        List<Employee> employee=xmlReaderWriter.readXml("Employees20140724.xml");
        employee=null;

    }
}
public class Employee{
    private long id;
    private String name;
    private boolean isMale;

    public Employee(){

    }

    public Employee(long id,String name,boolean isMale){
        this.id=id;
        this.name=name;
        this.isMale=isMale;
    }

    public long getId() {
        return id;
    }
    public void setId(long id) {
        this.id = id;
    }
    public boolean isMale() {
        return isMale;
    }
    public void setMale(boolean isMale) {
        this.isMale = isMale;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

这个的主要目的是让学生掌握如何导入第三方包。

爪哇国新游记之十三----XML文件读写的更多相关文章

  1. 爪哇国新游记之二十八----从url指定的地址下载文件到本地

    package download; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; ...

  2. 爪哇国新游记之三十四----Dom4j的XPath操作

    Dom4j是Java访问XML的利器之一,另一个是JDom.记得当年因为粗掌握点JDomAPI但项目要求使用Dom4j还闹一阵情绪,现在看来真是没必要,只花一些时间成本就进去一个新世界绝对是值得做的一 ...

  3. 爪哇国新游记之二十九----访问URL获取输入流

    代码: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import ...

  4. 爪哇国新游记之十四----初试JDBC

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  5. 爪哇国新游记之七----使用ArrayList统计水果出现次数

    之前学习制作了DArray,了解ArrayList就容易了. /** * 用于存储水果名及数量 * */ public class Fruit{ private String name; public ...

  6. 爪哇国新游记之二----用于计算三角形面积的Point类和TAngle类

    这次尝试用两个类完成一个面积计算任务: Point类代表平面上的点: public class Point { private float x; private float y; public Poi ...

  7. 爪哇国新游记之一----第一个类Cube

    将这个类作为Java学习的第一个类,简单易懂易上手. /** * 正方体类 */ public class Cube { private int length;// 正方体边长 private sta ...

  8. 爪哇国新游记之二十二----排序判断重复时间复杂度为2n的位图法

    import java.util.ArrayList; import java.util.List; /** * 位图法 * 用于整型数组判重复,得到无重复列表 * */ public class B ...

  9. 爪哇国新游记之十九----使用Stack检查数字表达式中括号的匹配性

    /** * 辅助类 * 用于记载字符和位置 * */ class CharPos{ char c; int pos; public CharPos(char c,int pos){ this.c=c; ...

随机推荐

  1. 每一对顶点间最短路径的Floyd算法

    Floyd思想可用下式描述: A-1[i][j]=gm[i][j] A(k+1)[i][j]=min{Ak[i][j],Ak[i][k+1]+Ak[K+1][j]}    -1<=k<=n ...

  2. python3连接使用sqlite3

    一直比较喜欢sqlite,业余爱好不需要大型数据库,原来在windows下最常用的就是access,使用很方便,但是linux下没法用,后 来从php+sqlite2开始使用,编程时间很少,代码量很小 ...

  3. PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集

    L2-001 紧急救援 (25 分)   作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...

  4. Bzoj2721 [Violet]樱花(筛法)

    题面 题解 首先化一下式子 $$ \frac 1x+\frac 1y=\frac 1{n!} \Rightarrow \frac {x+y}{xy}=\frac 1{n!} \Rightarrow ( ...

  5. 洛谷——P2813 母舰

    P2813 母舰 题目背景 广东汕头聿怀初中 Train#3 Problem 1 (有没有红警既视感~) 题目描述 在小A的星际大战游戏中,一艘强力的母舰往往决定了一场战争的胜负.一艘母舰的攻击力是普 ...

  6. 现代CSS清除浮动

    清除浮动 排除远古时代的hack解决方案,比如那些要兼容IE6~8的方法.其实总结起来,大致有三种方法: overflow 原理解析:块级格式上下文规定了页面必须自动包含突出的浮动元素! 而overf ...

  7. Python开发基础-Day6-函数参数、嵌套、返回值、对象、命名空间和作用域

    函数的使用原则 函数的使用必须遵循:先定义后使用的原则 函数的定义,与变量的定义是相似的,如果没有事先定义函数而直接引用就相当于在引用一个不存在变量名 定义阶段:只检测语法,不执行代码,当出现语法错误 ...

  8. 【BZOJ 1697】1697: [Usaco2007 Feb]Cow Sorting牛排序

    1697: [Usaco2007 Feb]Cow Sorting牛排序 Description 农夫JOHN准备把他的 N(1 <= N <= 10,000)头牛排队以便于行动.因为脾气大 ...

  9. 【BZOJ 4513】【SDOI 2016】储能表

    http://www.lydsy.com/JudgeOnline/problem.php?id=4513 设\(f(i,0/1,0/1,0/1)\)和\(g(i,0/1,0/1,0/1)\)分别表示d ...

  10. bzoj 2286(虚树+树形dp) 虚树模板

    树链求并又不会写,学了一发虚树,再也不虚啦~ 2286: [Sdoi2011]消耗战 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 5002  Sol ...