zoukankan      html  css  js  c++  java
  • JAVASE02-Unit012: Unit07: XML语法 、 XML解析

        Unit07: XML语法 、 XML解析    

    emplist.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <list>
        <emp id="1">
            <name>张三</name>
            <age>34</age>
            <gender></gender>
            <salary>3000</salary>
        </emp>
        <emp id="2">
            <name>李四</name>
            <age>21</age>
            <gender></gender>
            <salary>4000</salary>
        </emp>
        <emp id="3">
            <name>王五</name>
            <age>46</age>
            <gender></gender>
            <salary>6500</salary>
        </emp>
        <emp id="4">
            <name>赵六</name>
            <age>28</age>
            <gender></gender>
            <salary>4400</salary>
        </emp>
        <emp id="5">
            <name>钱七</name>
            <age>53</age>
            <gender></gender>
            <salary>12000</salary>
        </emp>
    </list>
    emplist.xml

    myemp.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <list>
      <emp id="1">
        <name>张三</name>
        <age>22</age>
        <gender></gender>
        <salary>5000</salary>
      </emp>
      <emp id="2">
        <name>李四</name>
        <age>23</age>
        <gender></gender>
        <salary>6000</salary>
      </emp>
      <emp id="3">
        <name>王五</name>
        <age>24</age>
        <gender></gender>
        <salary>7000</salary>
      </emp>
      <emp id="4">
        <name>赵六</name>
        <age>25</age>
        <gender></gender>
        <salary>8000</salary>
      </emp>
      <emp id="5">
        <name>钱七</name>
        <age>26</age>
        <gender></gender>
        <salary>9000</salary>
      </emp>
    </list>
    myemp.xml

    用当前类的实例保存xml文档中的一个员工信息 (这个是用构造方法生成的)

    package day12;
    /**
     * 用当前类的实例保存xml文档中的一个员工信息
     * @author adminitartor
     *
     */
    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;
        }
    }
    Emp.java

     * 使用DOM4J解析XML文档

    package day12;
    
    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;
    
    /**
     * 使用DOM4J解析XML文档
     * 
     * 将emplist.xml文档中的所有员工信息解析出来
     * 并存入到一个List集合保存
     * @author adminitartor
     *
     */
    public class ParseXmlDemo {
        public static void main(String[] args) {
            /*
             * 使用DOM4J解析XML的大致流程
             * 1:创建SAXReader
             * 2:使用SAXReader读取XML文档,并返回
             *   一个Document对象。
             *   这一步就是DOM解析XML耗时耗资源的地方
             *   因为这一步就会将XML文档中所有内容解析
             *   出来并以一个Document对象保存。由于对象
             *   存于内存,所以文档内容大的话会相应消耗
             *   资源。
             * 3:从Document中获取根元素
             * 4:根据XML文档结构从根元素中逐级获取子元
             *   素,最终达到遍历XML文档数据的目的。  
             */
            try {
                //1
                SAXReader reader = new SAXReader();
                
                //2读取xml文档并返回Document对象
    //            reader.read(new File("emplist.xml"));
                Document doc = reader.read(
                    new FileInputStream("emplist.xml")
                );
                System.out.println("读取xml文档完毕!");
                
                /*
                 * 3 获取根元素
                 * Element的每一个实例用于表示XML文档
                 * 中的一个元素(一对标签)
                 * 
                 * Element用于获取当前标签信息的相关方法:
                 * 
                 * String getName()
                 * 获取当前标签的名字
                 * 
                 * String getText()
                 * 获取当前标签中间的文本信息
                 * 
                 * List elements()
                 * 获取当前标签下的所有子标签
                 * 
                 * List elements(String name)
                 * 获取当前标签下所有同名子标签
                 * 
                 * Element element(String name)
                 * 获取当前标签下指定名字的子标签
                 * 
                 * String elementText(String name)
                 * 获取当前标签下指定名字的子标签中间的
                 * 文本。
                 * ele.elementText(name)
                 * 相当于调用了:
                 * ele.element(name).getText()
                 * 
                 * Attribute attribute(String name)
                 * 获取当前标签下指定名字的属性
                 * 
                 */
                Element root = doc.getRootElement();
                /*
                 * 该集合用于保存从xml文档中解析出来的
                 * 所有员工信息
                 */
                List<Emp> empList = new ArrayList<Emp>();
                
                //获取根标签<list>下面的所有子标签<emp>
                List<Element> list = root.elements();
                /*
                 * 遍历每一个员工标签<emp>,并将信息保存
                 * 到一个Emp对象上,然后存入empList集合
                 */
                for(Element empEle : list){
                    //获取name
                    Element nameEle = empEle.element("name");
                    String name = nameEle.getText();
    //                System.out.println(name);
                    
                    //获取age
                    int age = Integer.parseInt(
                        empEle.elementText("age")
                    );
                    
                    //gender
                    String gender = empEle.elementText("gender");
                    
                    //salary
                    int salary = Integer.parseInt(
                        empEle.elementText("salary")    
                    );
                    /*
                     * Attribute的每一个实例用于表示某个标签
                     * 中的一个属性。
                     * 常用方法:
                     * String getName()
                     * 获取属性名
                     * 
                     * String getValue()
                     * 获取属性值
                     */
                    Attribute attri = empEle.attribute("id");
                    int id = Integer.parseInt(
                        attri.getValue()
                    );
                    
                    Emp emp = new Emp(id, name, age, gender, salary);
                    empList.add(emp);
                }
                
                System.out.println("解析完毕!");
                
                for(Emp emp : empList){
                    System.out.println(emp);
                }
                
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            
            
        }
    }
    ParseXmlDemo.java

     * 使用DOM4J生成XML文档

    package day12;
    
    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;
    
    /**
     * 使用DOM4J生成XML文档
     * @author adminitartor
     *
     */
    public class WriteXmlDemo {
        public static void main(String[] args) {
            /*
             * 生成XML文档的大致步骤:
             * 1:创建一个Document对象表示一个空白
             *   文档
             * 2:向Document中添加根元素
             * 3:按照想生成的xml文档的结构顺序逐级的
             *   向根元素中添加子元素以及对应的信息
             * 4:创建XmlWriter对象
             * 5:将Document对象写出以形成xml文档
             * 6:关闭XmlWriter    
             */
            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));
                
                //1 创建一个空白文档
                Document doc = DocumentHelper.createDocument();
                
                /*
                 * 2 向文档中添加根元素
                 * Element addElement(String name)
                 * 添加给定名字的根元素,并将该元素以Element
                 * 实例形式返回,以便于继续操作。
                 * 
                 * 注意,该方法只能调用一次,因为一个文档只能有
                 * 一个根元素
                 * 
                 */
                Element root = doc.addElement("list");
                
                /*
                 * 3 添加子标签以形成xml文档结构
                 * 将集合中的每个员工信息作为一个<emp>标签
                 * 添加到根标签中
                 */
                for(Emp emp : empList){
                    /*
                     * Element提供了添加相应信息的方法:
                     * 
                     * Element addElement(String name)
                     * 向当前标签中添加给定名字的子标签并将其
                     * 返回。
                     */
                    Element empEle = root.addElement("emp");
                    
                    //向<emp>标签中添加<name>标签
                    Element nameEle = empEle.addElement("name");
                    //向<name>标签中添加文本信息
                    nameEle.addText(emp.getName());
                    
                    empEle.addElement("age").addText(emp.getAge()+"");
                    
                    empEle.addElement("gender").addText(emp.getGender());
                    
                    empEle.addElement("salary").addText(emp.getSalary()+"");
                    /*
                     * 向<emp>标签中添加属性"id"
                     */
                    empEle.addAttribute("id", emp.getId()+"");            
                }
                
                //4
                XMLWriter writer = new XMLWriter(
                    new FileOutputStream("myemp.xml"),
                    OutputFormat.createPrettyPrint()
                );
                
                writer.write(doc);
                System.out.println("写出完毕!");
                writer.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            
        }
    }
    WriteXmlDemo.java

     * 使用XPath检索XML数据

    package day12;
    
    import java.io.File;
    import java.util.List;
    
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    /**
     * 使用XPath检索XML数据
     * @author adminitartor
     *
     */
    public class XpathDemo {
        public static void main(String[] args) {
            try {
                SAXReader reader = new SAXReader();
                Document doc = reader.read(
                    new File("myemp.xml")
                );
                String path = "/list/emp[gender='女' and age>24]/salary";
                List<Element> list = doc.selectNodes(path);
                for(Element e : list){
                    System.out.println(e.getText());
                }
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    XpathDemo.java
  • 相关阅读:
    中国剩余定理(SCAUOJ 1077)
    uva 11426 GCD
    LA 4119 Always an integer (数论+模拟)
    uva 12003 Array Transformer (线段树套平衡树)
    uva 10253 Series-Parallel Networks (整数划分+多重集)
    LA 4123 Glenbow Museum
    uva 11361 Investigating Div-Sum Property
    2013多校训练赛第二场 总结
    uva 11174 Stand in a Line (排列组合)
    canvas 画椭圆
  • 原文地址:https://www.cnblogs.com/tangshengwei/p/6271028.html
Copyright © 2011-2022 走看看