XML 教程【一文彻底搞懂dom4j解析】

文章目录

  • 1. xml入门
    • 1.1 xml新建
    • 1.1 文档声明
    • 1.2 元素
    • 1.3 属性
    • 1.4 CDATA节
    • 1.5 转义字符
    • 1.6 格式正确的XML
  • DOM4J
    • DOM4J介绍
    • Dom4j应用实例
    • 2.2 遍历xml指定元素
    • 2.3 读取指定xml元素
    • 2.4 获取属性
    • 2.5 dom4j增删改
    • 2.6 作业

XML 教程【一文彻底搞懂dom4j解析】_第1张图片

1. xml入门

1.1 xml新建

XML 教程【一文彻底搞懂dom4j解析】_第2张图片
XML 教程【一文彻底搞懂dom4j解析】_第3张图片
XML 教程【一文彻底搞懂dom4j解析】_第4张图片
XML 教程【一文彻底搞懂dom4j解析】_第5张图片

1.1 文档声明

  1. XML声明放在XML文档的第一行
  2. XML声明由以下几个部分组成:
  3. version=“1.0” 文档符合XML1.0规范, 我们学习1.0
  4. encoding=“utf-8” 文件字符编码

1.2 元素

  1. 空标签 是允许的;
  2. 标签/元素/节点, 叫法是一样的;
  3. 是两个不同的标记. 区分大小写;
  4. 标签不能嵌套;
  5. 标签不能以数字开头;
  6. 不能包含空格, 可用下划线分隔;
  7. 不能包含冒号 :

1.3 属性

  1. id = ‘1’ 单引号也是正确写法;
  2. 如果属性值有" 则用’包括, 比如 id=“00’1”; 如果属性值有’ 则用"包括, 比如 id=‘00"1’
  3. 属性名在同一个元素标记中只能出现一次是错误的
  4. 属性值不能包含 &字符, 可以包含其它特殊字符

1.4 CDATA节

如果希望把某些字符串, 当作普通文本, 使用CDATA包括

    
    
            mary
            22
            
        
    ]]>

XML 教程【一文彻底搞懂dom4j解析】_第6张图片

1.5 转义字符

转义符 符号
< <
> >
& &
" "
' '

1.6 格式正确的XML

  1. XML声明语句
  2. 必须有且仅有一个根元素
  3. 标记大小写
  4. 属性值用引号
  5. 标记成对
  6. 标记记得关闭
  7. 元素正确嵌套

DOM4J

DOM4J介绍

1.Dom4j 是一个简单, 灵活的开放源代码的库(用于解析 / 处理XML文件). Dom4j 是由早期开发JDOM的人分离出来而后独立开发的.

2.与JDOM不同的是, dom4j使用接口和抽象基类, 虽然Dom4jAPI相对要复杂一些, 但它提供了比JDOM更好的灵活性.

3.Dom4j是一个非常优秀的Java XML API, 具有性能优异, 功能强大和极易使用的特点. 现在很多软件采用的Dom4j.

4.使用Dom4j开发, 需下载dom4j相应的jar文件.

文档: https://dom4j.github.io/javadoc/1.6.1/
XML 教程【一文彻底搞懂dom4j解析】_第7张图片

本地文档: dom4j-1.6.1\docs\index.html
XML 教程【一文彻底搞懂dom4j解析】_第8张图片

Dom4j中, 获得Document对象的三种方式

1.读取XML文件, 获得document对象
SAXReader reader = new SAXReader(); //创建解析器
Document document = read.read(new File(“src/input.xml”)); //XML Document

2.解析XML形式的文本, 得到document对象
String text = “;”
Documeng document = DocumentHelper.parseText(text);

3.主动创建document对象
Document document = DocumentHelper.createDocument(); //创建根节点
Element root = document.addElement(“members”);

Dom4j应用实例

1.使用DOM4Jstudents.xml文件进行增删改查

  • 重点讲解查询(遍历和指定查询)
  • xml增删改使用少, 作为扩展, 给出案例

2.xml 项目下新建lib文件夹, 引入dom4j依赖的jar包 dom4j-1.6.1.jar

3.右键该jar包, 点击Add As Library
XML 教程【一文彻底搞懂dom4j解析】_第9张图片

4.创建src/students.xml
XML 教程【一文彻底搞懂dom4j解析】_第10张图片


<students>
    <student id="01">
        <name>小龙女name>
        <gender>gender>
        <age>16age>
        <resume>古墓派掌门人resume>
    student>
    <student id="02">
        <name>欧阳锋name>
        <gender>gender>
        <age>18age>
        <resume>白驼山, 蛤蟆神功resume>
    student>
students>

5.src/Dom4j_.java


代码
XML 教程【一文彻底搞懂dom4j解析】_第11张图片
XML 教程【一文彻底搞懂dom4j解析】_第12张图片
XML 教程【一文彻底搞懂dom4j解析】_第13张图片
XML 教程【一文彻底搞懂dom4j解析】_第14张图片
XML 教程【一文彻底搞懂dom4j解析】_第15张图片
XML 教程【一文彻底搞懂dom4j解析】_第16张图片

2.2 遍历xml指定元素

XML 教程【一文彻底搞懂dom4j解析】_第17张图片

2.3 读取指定xml元素

/*指定读取第一个学生的信息*/
    @Test
    public void readOne() throws DocumentException {
        //获取解析器
        SAXReader reader = new SAXReader();
        Document document = reader.read(new File("src/students.xml"));
        //1.获取rootElement
        Element rootElement = document.getRootElement();
        //2.获取第一个学生
        Element student = (Element) rootElement.elements("student").get(0);
        //3.遍历student元素的节点并输出各个子节点的Text属性
        Element name = student.element("name");
        Element age = student.element("age");
        Element gender = student.element("gender");
        System.out.println("name=" + name.getText() + " age=" + age.getText() + " gender=" + gender.getText());
        //4.获取指定 student元素/节点 的属性值
        System.out.println("id=" + student.attributeValue("id"));
    }

2.4 获取属性

attributeValue

获取指定 student元素/节点 的属性值
System.out.println("id=" + student.attributeValue("id"));

2.5 dom4j增删改

  • 添加
    /*添加一个学生节点到xml文件中*/
    @Test
    public void add() throws DocumentException, IOException {
        //1.拿到解析器
        SAXReader reader = new SAXReader();
        //2.指定解析哪个Xml文件
        Document document = reader.read(new File("src/students.xml"));

        //3.首先创建一个学生节点对象
        Element student = DocumentHelper.createElement("student");
        // 创建name, age, gender子节点
        Element student_name = DocumentHelper.createElement("name");
        Element student_age = DocumentHelper.createElement("age");
        Element student_gender = DocumentHelper.createElement("gender");
        // 如何给元素添加属性
        student.addAttribute("id", "003");
        student_name.setText("威震天");
        student_age.setText("40000");
        student_gender.setText("机器族");

        //4.把三个子元素添加到student节点下
        student.add(student_name);
        student.add(student_age);
        student.add(student_gender);
        // 再把student节点挂载到rootElement下
        document.getRootElement().add(student);

        // 直接输出会中文乱码
        OutputFormat outputFormat = OutputFormat.createPrettyPrint();
        outputFormat.setEncoding("utf-8");

        //5.使用到IO编程 文件字节输出流
        XMLWriter Writer =
                new XMLWriter(new FileOutputStream(new File("src/students.xml")), outputFormat);
        Writer.write(document);
        Writer.close();
    }
  • 删除
    /*删除元素 删除最后一个学生信息*/
    @Test
    public void delete() throws DocumentException, IOException {
        //1.拿到解析器
        SAXReader reader = new SAXReader();
        //2.指定解析哪个Xml文件
        Document document = reader.read(new File("src/students.xml"));
        //3.找到最后一个学生节点
        Element student = (Element) document.getRootElement().elements("student").get(2);
        //拿到父节点 删除元素
        student.getParent().remove(student);

        //直接输出会中文乱码
        OutputFormat output = OutputFormat.createPrettyPrint();
        output.setEncoding("utf-8");
        //更新Xml文件
        XMLWriter writer = new XMLWriter(
                new FileOutputStream(new File("src/students.xml")), output);
        writer.write(document);
        writer.close();
    }
  • 修改
/*修改元素(所有元素的age+3)*/
    @Test
    public void update() throws DocumentException, IOException {
        //1.拿到解析器
        SAXReader reader = new SAXReader();
        //2.指定解析哪个Xml文件
        Document document = reader.read(new File("src/students.xml"));
        //3.拿到所有的student元素
        List<Element> students = document.getRootElement().elements("student");
        //遍历
        for (Element student : students) {
            //设置所有学生的年龄
            Element age = student.element("age");
            age.setText(Integer.parseInt(age.getText()) + 3 + "");
        }
        //直接输出会中文乱码
        OutputFormat output = OutputFormat.createPrettyPrint();
        output.setEncoding("utf-8");
        //4.IO流 文件字节输出流
        XMLWriter writer = new XMLWriter(
                new FileOutputStream(new File("src/students.xml")), output);
        writer.write(document);
        writer.close();
    }

2.6 作业

//1.拿到解析器
        SAXReader reader = new SAXReader();
        //2.指定解析books.xml文件
        Document document = reader.read(new File("src/books.xml"));
        //拿到rootElement下的 book元素
        List<Element> books = document.getRootElement().elements("book");

        ArrayList<Book> list = new ArrayList<>();
        Book book1 = null;
        int id = 0;
        String name = "";
        String author = "";
        double price = 0;

        //循环遍历 book节点
        for (Element book : books) {
            id = Integer.parseInt(book.attributeValue("id"));
            name = book.element("name").getText();
            author = book.element("author").getText();
            price = Double.parseDouble(book.element("price").getText());
            book1 = new Book(id, name, author, price);
            list.add(book1);
        }
        for (int i = 0; i < list.size(); i++) {
            Book book = list.get(i);
            System.out.println("编号 " + book.getId() + "\t\t作者 " + book.getAuthor() +
                    "\t\t书名 " + book.getName() + "\t\t价格 " + book.getPrice());
        }

你可能感兴趣的:(JavaWeb,xml,学习,java)