DOM解析和生成XML文档

import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
/**
 * DOM解析XML文档
 * @author Administrator
 *
 */
public class ParseXmlDemo {
    public static void main(String[] args) {
        try {
            /*
             * 解析步骤:
             * 1:创建SAXReader
             * 2:使用SAXReader解析xml文档,当
             *   解析后,会生成一个Document类型的
             *   实例,该实例则记录了xml文档中的
             *   所有内容
             * 3:通过Document对象获取根元素
             * 4:从根元素开始,根据xml文档结构
             *   逐级获取子元素,以到达获取xml文档
             *   数据的目的
             */
            //1
            SAXReader reader = new SAXReader();
            
            /*
             * 2 这一步执行完毕后,xml文档的实际解析工作
             * 就已经结束了,并且xml文档中的内容都记录在
             * doc对象中了.
             * 所以说dom解析慢,内存占用大都体现在这一个
             * 环节.
             */
//            reader.read(new File("emplist.xml"));
            Document doc = reader.read(new FileInputStream("emplist.xml"));
            
            /*
             * 3 Document提供了获取根元素的方法
             *   Element getRootElement()
             *   该方法返回一个Element的实例,而每一个
             *   Element的实例都表示xml文档中的一个
             *   元素(标签)
             *   这里获取的根元素就是emplist.xml文档
             *   中的<list>标签.
             */
            Element root = doc.getRootElement();
            /*
             * Element提供了获取子元素的相关方法
             *
             * Element element(String name)
             * 获取指定名字的子元素,要是有多个获取第一个
             *
             * List elements()
             * 获取所有子元素,返回的集合中含有若干个
             * Element实例,每一个实例表示一个子元素
             *
             * List elements(String name)
             * 获取所有同名的子元素.
             *
             */
            List<Element> list = root.elements();
            
            List<Emp> empList = new ArrayList<Emp>();
            
            /*
             * 遍历<list>中的每一个<emp>标签
             * 并将信息存入到一个Emp对象中,并
             * 最终保存到empList集合
             */
            for(Element empEle : list){
                //获取<name>标签
                Element nameEle = empEle.element("name");
                /*
                 * Element还提供了一些获取标签
                 * 信息的常用方法:
                 * String getName()
                 * 获取当前标签的名字
                 *
                 * String getText()
                 * 获取当前标签中间的文本信息
                 *
                 * String getTextTrim()
                 */
                String name = nameEle.getText();
                
                
                /*
                 * Element的方法:
                 * String elementText(String name)
                 * 该方法是获取当前标签下指定名字的子标签
                 * 中间的文本
                 */
                int age = Integer.parseInt(empEle.elementText("age"));
                String gender = empEle.elementText("gender");
                int salary = Integer.parseInt(empEle.elementText("salary"));
                /*
                 * Element提供方法:
                 * Attribute attribute(String name)
                 * 获取当前标签中指定名字的属性.
                 * 返回值为Attribute的一个实例.
                 * Attribute的每一个实例用于表示某个
                 * 标签中的一个属性,其定义了两个常用方法:
                 * String getName():获取属性名
                 * String getValue():获取属性值
                 */
                Attribute attr= empEle.attribute("id");
                int id = Integer.parseInt(attr.getValue());
                
                Emp emp = new Emp(id, name, age, gender, salary);
                empList.add(emp);
            
            }
            
            System.out.println("解析完毕!");
            for(Emp e : empList){
                System.out.println(e);
            }
            
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

/**
 * 使用DOM生成XML文档
 * @author Administrator
 *
 */
public class WriteXmlDemo {
    public static void main(String[] args) {
        try {
            List<Emp> empList = new ArrayList<Emp>();
            empList.add(new Emp(1,"张三",22,"男",5000));
            empList.add(new Emp(2,"李四",23,"女",6000));
            empList.add(new Emp(3,"王五",24,"男",7000));
            empList.add(new Emp(4,"赵六",25,"女",8000));
            empList.add(new Emp(5,"钱七",26,"男",9000));
            
            
            /*
             * 生成XML文档的大致步骤:
             * 1:创建一个表示空白文档的Document
             *   对象
             * 2:向Document对象中添加根元素
             * 3:根据文档应当生成的结构逐级从根
             *   元素开始添加子元素已达到目的.
             * 4:创建XMLWriter
             * 5:通过XMLWriter将Document对象
             *   描述的结构写出成XML文档    
             * 6:将XMLWriter关闭
             */
            //1
            Document doc = DocumentHelper.createDocument();
            
            /*
             * 2 Document提供了方法:
             * Element addElement(String str)
             * 向当前文档中添加给定名字的根元素,该方法返回的
             * Element实例即表示刚添加的根元素,以便后续向
             * 该元素添加子元素完成文档结构.
             * 需要注意,由于XML文档只能有一个根元素,所以
             * 该方法不能调用两次以上,否则抛出异常
             */
            Element root = doc.addElement("list");
            
            //3
            for(Emp emp : empList){
                /*
                 * Element也提供了向当前标签添加
                 * 子标签的方法:
                 * Element addElement(String name)
                 */
                Element empEle = root.addElement("emp");
                
                //添加name标签
                Element nameEle= empEle.addElement("name");
                /*
                 * Element addText(String text)
                 * 向当前标签中添加文本
                 */
                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(String.valueOf(emp.getSalary()));
                
                /*
                 * Element提供添加属性的方法:
                 * Element addAttribute(
                 *   String name,String value
                 * )
                 */
                //添加id属性
                empEle.addAttribute("id", emp.getId()+"");        
            }
            
            //4
            XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());
            writer.setOutputStream(new FileOutputStream("myemp.xml"));
            
            //5
            writer.write(doc);
            
            //6
            writer.close();
            System.out.println("写出完毕!");
            
            
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

你可能感兴趣的:(DOM解析和生成XML文档)