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

时间: 01-08

JAVASE02-Unit012: Unit07: XML语法 、 XML解析的相关文章

JavaScript之Ajax-3 XML语法(XML概述、基本语法)

一.XML概述 XML概述 - XML 是可扩展标记语言(eXtensible Markup Language) - XML 是一种标记语言,类似于HTML - XML 的设计宗旨是传输数据,尔非现实数据 - XML 的标签没有被预定义,需要自行定义 - XML 是W3C的推荐标准 XML用途 - XML 应用于web开发的许多方面,常用于简化数据的存储和共享 - XML 可以将数据从 HTML 中分离出来 - XML 可以简化数据共享 - XML 可以简化数据传输 二.基本语法 XML声明 -

xml语法、DTD约束xml、Schema约束xml、DOM解析xml

今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的html语言,html是超文本标记语言,使用html语言规定好的标签来封装文本数据.而html使用的标签html语言规定好的,每个标签都有自己特定的功能. xml语言,可扩展的标记语言,这门语言它没有定义任何的标记,而标记是由使用者自己来定义,但是由于标签名称以及属性名称都由用户自己来命名,导致别人在使

关于XML与XML解析(一)

XML语言 XML语言:可扩展标记语言(HTML 超文本标记语言) XML与HTML的差异主要在于其标记完全是自定义的,我们只需要遵循一定的语法结构即可. 其主要作用是:存储配置信息和传输数据(用于数据交换) 特点: 1.xml文件后缀名:.xml(可使用浏览器浏览) 2.xml文档结构:序言(<?xml version="1.0" encoding="字符集">) + 数据部分 3.xml节点:分双标记和单标记(开始标记--结束标记),根标记只能有一对

day14(xml 编写及解析)

编写 xml的组成: 1.文档的声明 <?xml version='1.0' encoding='UTF-8' standalone='yes'> xml 表示标签的名字 encoding 编码格式 standalone 标记此文档是否独立 2.元素(节点),元素属性(使用在不包含标签体中体现)    a: 包含标签体                 理解: 简括号全部成对儿出现, 所有的数据都用一对儿简括号存储                 例:                     &

16-1-8 JAVA学习笔记(1) XML语法

一.XML语法 1.xml文档声明,声明基本属性,有且只有一个文档生活,必须在最前端: <?xml version="1.0" encoding="utf-8" standalone="yes" ?>; 2.xml元素,一个xml标签就是一个xml元素,一个标签分为开始标签和结束标签,在开始标签跟结束标签间可以包含文本,文件内容成为标签体, 如果一个xml标签内不包括标签体也不包含其他元素,那么可以把开始标签跟结束标签合并,称为自闭标

xml介绍 约束 解析

今天内容 1.xml介绍 2.xml约束 3.xml解析 以上内容可以看懂,理解 4.贪吃蛇(补充)------------------------------------------------ 1.xml xml:可扩展的标记语言. xml作用:用于存储与传输数据. xml与html区别 ? XML 不是 HTML 的替代.-----xml对应xlst 相当于css于html ? XML 和 HTML 为不同的目的而设计: ? XML 被设计为传输和存储数据,其焦点是数据的内容. ? HTM

JavaEE实战——XML语法和约束技术

MyEclipse8.5 1.配置workspace ----- 建议不要采用含有空格和中文目录,所有代码保存workspace空间中 2.新建工程时,设置工程需要jre环境 MyEclipse提供多种内置layout --- 每种布局 界面不同,菜单不同 工程的属性 编码集 --- 导入其它工程时,注意编码类型一致 java build path 设置 classpath位置 ,指定当前工程引入类库 source中指定.java 文件 和.class文件 存放位置 librialies 指定当

xml基础及其解析xml文档

xml基础及其解析xml文档 xml基础及其解析xml文档 xml基础语法 中国特色乱码问题 写xml文件的工具 xml中使用的转义字符 处理指令已经过时 xml的两个重要的功能 xml注释 xml解析Java应用程序读取xml文件的内容 xml解析原理 xml解析工具 DOM4J使用 DOM4J中核心API 将xml文档从磁盘读进内存形成Document对象 读取所有的标签节点 读取所有的属性节点 读取所有的文本节点 解决上面提出的问题 xml基础语法 一个基本的xml构成: <!--vers

XML语法与约束

1.开发工具介绍 1.开发工具 JDK eclipse(真正开发的用的是eclipse)----IBM发布 eclipse可以添加很多的插件(添加自己需要的插件) myeclipse已经添加了很多的插件(收费) 2.myeclipse视图恢复最原始的样子(重置视图) window--> Reset Perspective 3.切换视图 4.创建工程导入自定义安装的JDK 添加 5.修改快捷键 window--> preferences--> General--> Keys-->