XML语法和XML解析

XML用途

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

XML读取与生成

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

?xml version="1.0" encoding="UTF-8"?>
<list>
    <emp id="1">
        <name>张三丰</name>
        <age>22</age>
        <gender>男</gender>
        <salary>3000</salary>
    </emp>
    <emp id="2">
        <name>李四</name>
        <age>46</age>
        <gender>男</gender>
        <salary>10000</salary>
    </emp>
    <emp id="3">
        <name>王五</name>
        <age>21</age>
        <gender>女</gender>
        <salary>4500</salary>
    </emp>
    <emp id="4">
        <name>赵六</name>
        <age>23</age>
        <gender>女</gender>
        <salary>5000</salary>
    </emp>
    <emp id="5">
        <name>钱七</name>
        <age>35</age>
        <gender>男</gender>
        <salary>8000</salary>
    </emp>
    <emp id="6">
        <name>哈哈</name>
        <age>35</age>
        <gender>男</gender>
        <salary>8000</salary>
    </emp>
</list><?xml version="1.0" encoding="UTF-8"?>
<list>
    <emp id="1">
        <name>张三丰</name>
        <age>22</age>
        <gender>男</gender>
        <salary>3000</salary>
    </emp>
    <emp id="2">
        <name>李四</name>
        <age>46</age>
        <gender>男</gender>
        <salary>10000</salary>
    </emp>
    <emp id="3">
        <name>王五</name>
        <age>21</age>
        <gender>女</gender>
        <salary>4500</salary>
    </emp>
    <emp id="4">
        <name>赵六</name>
        <age>23</age>
        <gender>女</gender>
        <salary>5000</salary>
    </emp>
    <emp id="5">
        <name>钱七</name>
        <age>35</age>
        <gender>男</gender>
        <salary>8000</salary>
    </emp>
    <emp id="6">
        <name>哈哈</name>
        <age>35</age>
        <gender>男</gender>
        <salary>8000</salary>
    </emp>
</list>

用于存放员工信息的值对象 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<Emp> list = new ArrayList<Emp>();
        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<Element> 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<Emp> list = new ArrayList<Emp>();
        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"));
            //添加<name>
            Element nameEle = empEle.addElement("name");
            nameEle.addText(emp.getName());
            //添加<age>
            Element ageEle = empEle.addElement("age");
            ageEle.addText(emp.getAge()+"");
            //添加<gender>
            Element genderEle = empEle.addElement("gender");
            genderEle.addText(emp.getGender());
            //添加<salary>
            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();
                }
            }
        }
        
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,284评论 25 708
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,366评论 11 349
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • 亲子日记第二十五天,上午送孩子们去上学,幼儿园老师让给孩子买两本关于声音的绘本,我这急性子耐不住了,起身就去...
    AA稳稳阅读 115评论 0 3
  • 想要的是一个可以一起玩耍行走说说话儿的伙伴 你不应该只是一个拿来暧昧和炫耀的对象称呼 亦或许 我们不需要一场形式的...
    _湫子阅读 241评论 0 0