XML语法和XML解析

XML用途

  • XML指可扩展标记语言(EXtensible Markup Language),是独立于软件和硬件的信息传输工具
  • XML应用于web开发的许多方面,常用于简化数据的存储和共享。
  • XML简化数据共享
  • XML简化数据传输
  • XML简化平台的变更

XML读取与生成

存放员工信息的xml文件 emolist.xml

?xml version="1.0" encoding="UTF-8"?>

    
        张三丰
        22
        
        3000
    
    
        李四
        46
        
        10000
    
    
        王五
        21
        
        4500
    
    
        赵六
        23
        
        5000
    
    
        钱七
        35
        
        8000
    
    
        哈哈
        35
        
        8000
    


    
        张三丰
        22
        
        3000
    
    
        李四
        46
        
        10000
    
    
        王五
        21
        
        4500
    
    
        赵六
        23
        
        5000
    
    
        钱七
        35
        
        8000
    
    
        哈哈
        35
        
        8000
    

用于存放员工信息的值对象 Emp.java

/**
 * 用来表示一个员工信息
 * 
 * VO value object值对象
 * 所谓指对象,就是当前的每个实例就是用来保存一组
 * 数据使用.
 * @author soft01
 *
 */
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 ;
    }
}

解析XML ParseXmlDemo.java

/**
 * 解析XML
 * @author soft01
 *
 */
public class ParseXmlDemo {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(new Emp(1,"张三",22,"男",3000));
        list.add(new Emp(3,"李四",23,"女",4000));
        list.add(new Emp(4,"王五",23,"男",4000));
        list.add(new Emp(5,"赵六",25,"女",4000));
        /*
         * 原来我们程序使用的数据都是写在程序里的
         * 这样带来的问题是数据发送改变就会修改源代码
         * 这在实际开放中是极其不可取的!
         * 所以在实际开发中,我们通常的做法是程序
         * 与程序运行时需要的数据分离开,将数据保存
         * 到一个文件中,程序运行时通过读取文件中的
         * 数据来运行。这样将来数据有修改只需要在该
         * 文件中作出修改即可,程序无需做任何改动。
         * 
         * 将emplist.xml文件中的员工信息读出来存入
         * List集合。
         * 
         * 使用DOM解析XML的大致步骤
         * 1:创建SAXReader
         * 2:使用SAXReader读取XML文档并生成
         *  Document对象
         *  这一部就是DOM耗时耗资源的地方,因为要
         *  将XML文档全部读取完毕并以Document对象
         *  存入内存。
         * 3:通过Document获取根元素
         * 4:按照XML文档结构从根元素开始逐级开始获取子元素
         *  以达到获取XML文档数据的目的
         */
        try {
            //1
            SAXReader reader = new SAXReader();
            //2
//          reader.read(new File("emplist.xml"));
            Document doc = reader.read(new FileInputStream("emplist.xml"));
            System.out.println("读取文档完毕!");
            /*
             * 3获取根元素
             * Document提供的方法:
             * Element getRootElement()
             * 获取当前XML文档的根元素
             * org.dom4j下的Element的每一个实例
             * 用于表示XML文档中的一个元素(一对标签)
             */
            Element root = doc.getRootElement();
            /*
             * Element提供了获取当前元素信息的方法:
             * 常用:
             * 1:String getName()
             *  获取当前元素的名字
             * 2:String getText();
             *  获取当前元素中间的文本数据(开始
             *  标签与结束标签中间的文本内容)
             * 3:List elements()
             *  获取当前元素中的所有子元素
             * 5:Element element(String name)
             *   获取当前元素中指定名字的子元素
             * 6:String elementText(String name)
             *   获取当前元素中指定名字子元素中间的
             *   文本.
             *   String str = ele.elementText(name);
             *   效果等同于:
             *   String str = ele.element(name).getText();
             * 7:Attribute attribute(String name)
             *   获取当前元素中指定名字的属性
             * 8:String attributeValue(String name)
             *   获取当前元素中指定名字的属性的值
             */
            List emplist = root.elements();
            for(Element empEle : emplist) {
                //获取员工名字
                Element nameEle = empEle.element("name");
                String name = nameEle.getText();
                System.out.println(name);
                
                //获取年龄
                Element ageEle = empEle.element("age");
                int age = Integer.parseInt(ageEle.getText());
                System.out.println(age);
                
                //获取性别
                String gender = empEle.elementText("gender");
                System.out.println(gender);
                
                //获取工资
                int salary = Integer.parseInt(empEle.elementText("salary"));
                System.out.println(salary);
                
                //获取ID属性
                int id = Integer.parseInt(empEle.attributeValue("id"));
                System.out.println(id);
                
                Emp emp = new Emp(id,name,age,gender,salary);
                list.add(emp);
            }
            
            System.out.println("解析完毕!");
            list.forEach((e)->System.out.println(e));
            
//          for(Emp e : list) {
//              System.out.println(e);
//          }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }
    
}

生成XML文档 WriterXMLDrmo.java

/**
 * 使用DOM生成XML文档
 * @author soft01
 *
 */
public class WriteXMLDemo {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(new Emp(1,"张三",22,"男",3000));
        list.add(new Emp(2,"李四",23,"女",4000));
        list.add(new Emp(3,"王五",24,"男",5000));
        list.add(new Emp(4,"赵六",25,"女",6000));
        /*
         * 使用DOM生成一个XML文档的大致步骤:
         * 1:创建一个Document实例,表示一个空白文档
         * 2:向Document中添加根元素
         * 3:按照XML文档结构要求逐级添加子元素和数据
         *  以形成该结构
         * 4:创建XMLWriter
         * 5:使用XMLWriter将Document实例写出以形成
         *  xml文档
         */
        //1
        Document doc =DocumentHelper.createDocument();
        
        /*
         * 2 添加根元素
         * Document提供方法:
         * Element addElement(String name)
         * 向当前文档中添加根元素,并将该元素以Element实例
         * 返回,以便继续操作根元素。
         * 需要注意,该方法只能调用一次,因为一个XML文档中
         * 只允许有一个根元素。
         */
        Element root = doc.addElement("list");
        /*
         * Elemt也提供了相关的操作方法:
         * 
         * Element addElement(String name)
         * 向当前元素添加给定名字的子元素并返回
         * 
         * Element addText(String text)
         * 向当前元素中添加文本,添加到该开始标签与
         * 结束标签之间
         * 
         */
        for(Emp emp : list) {
            Element empEle = root.addElement(("emp"));
            //添加
            Element nameEle = empEle.addElement("name");
            nameEle.addText(emp.getName());
            //添加
            Element ageEle = empEle.addElement("age");
            ageEle.addText(emp.getAge()+"");
            //添加
            Element genderEle = empEle.addElement("gender");
            genderEle.addText(emp.getGender());
            //添加
            Element salaryEle = empEle.addElement("salary");
            salaryEle.addText(emp.getSalary()+"");
            //添加id属性
            empEle.addAttribute("id", emp.getId()+"");
        }
        
        XMLWriter writer = null;
        try {
            writer = new XMLWriter(new FileOutputStream("myemp.xml"),OutputFormat.createPrettyPrint());
            writer.write(doc);
            System.out.println("写成完毕!");
        }catch(Exception e) {
            e.printStackTrace();
        }finally {
            if(writer!=null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        
    }
}

你可能感兴趣的:(XML语法和XML解析)