/**
 * 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. lr手工添加关联函数的步骤:

    点击“确定”后: 如何修改已经创建好的关联规则:

  2. 安装 Apache 源代码包

    把自己在网易博客的文章迁移过来 cd /lamp/httpd-2.2.9 ./configure --prefix=/usr/local/apache2/ --sysconfdir=/usr/loca ...

  3. 洛谷P3391文艺平衡树(Splay)

    题目传送门 转载自https://www.cnblogs.com/yousiki/p/6147455.html,转载请注明出处 经典引文 空间效率:O(n) 时间效率:O(log n)插入.查找.删除 ...

  4. Spring源码分析之Bean的加载流程

    spring版本为4.3.6.RELEASE 不管是xml方式配置bean还是基于注解的形式,最终都会调用AbstractApplicationContext的refresh方法: @Override ...

  5. POJ 2348 Euclid's Game 博弈论

    http://poj.org/problem?id=2348 顺便说,必应翻译真的好用,比谷歌翻译好用100倍. 很难判断这道题的具体博弈类型. 有两种写法,一种是找规律,一种是推理得到关系后循环(或 ...

  6. 【20181019T1】加密【逆元+位运算】

    题面 [错解] 可能要逆推 <<就是乘法,好做 但^是什么东西? 欸暴力map70分,索性妥协 [正解] 注意^是自己异或上自己右移,前i位就是t的前i位 往后推就好 代码

  7. BZOJ 2286 [Sdoi2011]消耗战(虚树+树形DP)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2286 [题目大意] 出一棵边权树,每次给出一些关键点,求最小边割集, 使得1点与各个关 ...

  8. BZOJ 4260 Codechef REBXOR(字典树)

    [题目链接]  http://www.lydsy.com/JudgeOnline/problem.php?id=4260 [题目大意] 给出一个数列,请找出两段连续且不相交的数段,使得其分别异或和的和 ...

  9. 【推导】【贪心】Codeforces Round #431 (Div. 1) A. From Y to Y

    题意:让你构造一个只包含小写字母的可重集,每次可以取两个元素,将它们合并,合并的代价是这两个元素各自的从‘a’到‘z’出现的次数之积的和. 给你K,你构造的可重集必须满足将所有元素合而为一以后,所消耗 ...

  10. [HihoCoder1259]A Math Problem

    题目大意: 有一个函数f(n),满足3f(n)*f(2n+1)=f(2n)*(1+3f(n)),f(2n)<6f(n). 我们用g(t)表示f(i)%k=t的i的个数,其中1<=i< ...