zoukankan      html  css  js  c++  java
  • XML+DOM4J

    XML语法

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

    XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。

    其中datasource就是一个元素,它可以包含其他元素,例如property。同理property也是一个元素,元素除了包含元素还可以包含文本信息。元素也可以含有属性,比如property就具有name属性。

    XML 元素可以在开始标签中包含属性,属性 (Attribute) 提供关于元素的额外(附加)信息。属性通常提供不属于数据组成部分的信息,但是对需要处理这个元素的应用程序来说却很重要。

    XML 属性必须加引号,属性值必须被引号包围,不过单引号和双引号均可使用。

    如果属性值本身包含双引号,那么有必要使用单引号包围它,或者可以使用实体引用。

    元素必须有关闭标签 XML要求每个元素必须由起始标签和关闭标签组成。关闭标签与起始标签的名字相同,写法上多一个“/”

    XML要求必须有根元素,所谓根元素就是不被其它元素包围(不含有父元素)。并且根元素只能有一个。

    实体引用:

    CDATA段:

    XML解析

    SAX解析方式:

    SAX(simple API for XML)是一种XML解析的替代方法。相比于DOM,SAX是一种速度更快,更有效的方法。它逐行扫描文档,一边扫描一边解析。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析。 其优缺点分别为:

    优点: 解析可以立即开始,速度快,没有内存压力

    缺点: 不能对节点做修改

    DOM解析方式:

    DOM:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。DOM解析器在解析XML文档时,会把文档中的所有元素,按照其出现的层次关系,解析成一个个Node对象(节点)。其优缺点分别为:

    优点:把xml文件在内存中构造树形结构,可以遍历和修改节点

    缺点: 如果文件比较大,内存有压力,解析的时间会比较长

    public static void main(String[] args) {
            /*
             * 解析XML的大致步骤
             * 1:创建SAXReader
             * 2:使用SAXReader读取XML文档并生成Document对象
             *   这一步就是DOM解析耗时耗资源的地方 因为要先将XML文档内容全部读取完毕
             *   并生成一个Document对象.
             * 3:通过Document获取根元素
             * 4:按照XML文档的结构从根元素开始 逐级获取子元素以达到遍历XML文档数据的目的.
             */
            
            /*
             * 该集合用于保存从emplist.xml文档中解析出来的员工信息
             */
            List<Emp> list=new ArrayList<Emp>();
            try{
                //1.创建SAXReader
                SAXReader reader=new SAXReader();
                
                //2.使用SAXReader读取XML文档并生成Document对象
                Document doc=reader.read(new FileInputStream("emplist.xml"));
                
                /*
                 * Document提供了获取根元素的方法:
                 * Element getRootElement()
                 * 
                 * Element 的每一个实例用于表示XML文档中的一个元素(一对标签)
                 * 
                 * Element 提供了获取其元素的相关信息的方法:
                 * 
                 * String getName()
                 * 获取标签的名字
                 * 
                 * String getText()
                 * 获取标签中间的文本信息(开始标签与结束标签之间的文本)
                 * 
                 * Elment element(String name)
                 * 获取指定名字的子元素
                 * 
                 * List elements(String name)
                 * 获取所有同名子元素
                 * 
                 * Attribute attribute(String name)
                 * 获取指定名字的属性
                 */
                Element root=doc.getRootElement();
                /*
                 * 获取根元素<list>下面所有子元素
                 * 若干个<emp>元素.而每一个<emp>元素也是使用Element实例表示,
                 * 并存入集合后返回.
                 */
                List<Element> empList= root.elements();
                for(Element empEle:empList){
                    //获取员工姓名
                    Element nameEle=empEle.element("name");
                    String name=nameEle.getText();
                    //获取age
                    int age=Integer.parseInt(empEle.elementText("age"));
                    /*
                     * Element有一个可以快速获取子标签中间的文本方法:
                     * String elementText(String name);
                     * 例如:
                     * empEle.elementText("gender")
                     * 等同于
                     * empEle.element("gender").getText()
                     * 
                     */
                    //获取gender
                    String gender=empEle.elementText("gender");
                    //获取salary
                    int salary=Integer.parseInt(empEle.elementText("salary"));               
                    int id=Integer.parseInt(empEle.attributeValue("id"));                
                    Emp emp=new Emp(id,name,age,gender,salary);
                    list.add(emp);              
                }
                System.out.println("解析完毕!");
                for(Emp e:list){
                    System.out.println(e);
                }                   
            }catch(Exception e){
                e.printStackTrace();
            }
        }

    emplist.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <list>
         <emp id="1">
              <name>张三</name>
              <age>22</age>
              <gender>男</gender>
              <salary>2500</salary>
         </emp>
         <emp id="2">
              <name>李四</name>
              <age>25</age>
              <gender>女</gender>
              <salary>5000</salary>
         </emp>
         <emp id="3">
              <name>王五</name>
              <age>30</age>
              <gender>女</gender>
              <salary>7500</salary>
         </emp>
         <emp id="4">
              <name>赵六</name>
              <age>35</age>
              <gender>男</gender>
              <salary>6000</salary>
         </emp>
    </list>
    Emp 实体类:
    /**
     * 表示一个员工的信息
     */
    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;
        }
        
        public String toString(){
            return id+","+name+","+age+","+gender+","+salary;
        }
        
    }

    XML:

    /**
     * 使用DMO生成XML文档
     * @author jiyiyuan
     *
     */
    public class WriteXMLDemo {
        public static void main(String[] args) {
            /*
             *生成XML文档的大致步骤
             *1:创建一个Document对象表示一个空白文档。
             *2:向Document对象中添加根元素 
             *3:按照预定的XML文档结构从根元素开始逐级添加子元素
             *4:创建XMLWriter
             *5:通过XMLWriter将Document写出以形成XML文档
             */
            
            List<Emp> list=new ArrayList<Emp>();
            list.add(new Emp(1,"安其拉",25,"",5000));
            list.add(new Emp(2,"妲己",15,"",25000));
            list.add(new Emp(3,"亚瑟",35,"",15000));
            list.add(new Emp(4,"典韦",55,"",7000));
            
            try{
                //1.创建一个Document对象表示一个空白文档。
                Document doc=DocumentHelper.createDocument();
                
                /*
                 * Document 提供了添加根源的方法
                 * Element addElement(String name)
                 * 向当前文档中添加给定名字的根元素,并将它以Element
                 * 实例返回,以便继续向根元素中追加内容
                 * 需要注意,该方法只能调用一次,因为一个文档中只能有一个根元素
                 */
                
                Element root=doc.addElement("list");
                /*
                 * Element提供了向标签中添加信息的相关方法:
                 * 
                 * Element addElement(String name)
                 * 添加给定名字的子标签并将其返回
                 * 
                 * Element addText(String text)
                 * 添加文本信息,返回值为当前标签,这样做便于连续追加操作
                 * 
                 * Element addAttribute(String name,String value)
                 * 添加给定名字及对应值的属性,返回值为当前标签
                 * 
                 * 
                 * 将每一个emp实例以一个<emp>标签的形式 添加到根标签<list>中
                 */
                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(String.valueOf(emp.getAge()));
                    //添加<gender>
                    Element genderEle=empEle.addElement("gender");
                    genderEle.addText(emp.getGender());
                    //添加<salary>
                    Element salaryEle=empEle.addElement("salary");
                    salaryEle.addText(String.valueOf(emp.getSalary()));
                    //添加id属性
                    empEle.addAttribute("id",String.valueOf(emp.getId()));
                }
                //4.创建XMLWriter
                XMLWriter writer=new XMLWriter(new FileOutputStream("myemp.xml"),
                        OutputFormat.createPrettyPrint());
                //5.通过XMLWriter将Document写出以形成XML文档
                writer.write(doc);
                System.out.println("写出完毕!");
                writer.close();
            }catch(Exception e){
                e.printStackTrace();
            }   
            
        }
    
    }
  • 相关阅读:
    无root权限安装tmux
    mosquitto_pub和mosquitto_sub 命令参数说明
    安装Mosquitto学习MOTT协议
    Linux之prink原理
    JZ2440支持设备树(1)-添加设备树之后kernel的启动参数跟dts里面不一致
    Linux可以生产uImage
    Ubuntu18.04下make menuconfig缺少ncurses库
    如何打开kernel最开始的打印
    buildroot管理uboot+kernel+rootfs
    STM32L071CBTX操作ECC508
  • 原文地址:https://www.cnblogs.com/jyy599/p/12088741.html
Copyright © 2011-2022 走看看