【xml】【dom4j】【学习笔记】寒假javaweb学习之旅1.0

寒假不能大溜特溜,必须得狠狠地学😤😤

1、xml

xml是可扩展的标记性语言。

1.1、xml的作用

1、用来保存数据,而且这些数据具有自我描述性
如图所示
2、它还可以做为项目或者模块的配置文件。
3、还可以做为网络传输数据的格式。

1.2、什么是xml元素

元素是指从开始标签到结束标签的内容。可以当标签理解。

例如下面的<name>书本1</name> 就是。

<?xml version="1.0" encoding="utf-8" ?>
<!--上面是文本申明-->
<books>
    <book sn="SN123">
        <name>书本1</name>
        <author>我不好说</author>
    </book>
    <book sn="SN124">
        <name>&lt;br&gt;</name>
        <author>上面的特殊字符用的很秒</author>
    </book>
    <book sn="SN125" name="这样写成单标签也行"/>
</books>

1.3、xml元素命名规则

● 名称可以含字母、数字以及其他的字符 (甚至中文都行🐶头)
● 名称不能以数字或者标点符号开始
● 名称不能以字符“xml" (或者XML、Xml)开始
● 名称不能包含空格

1.4、xml 文档必须有根元素

根元素就是顶级元素,
没有父标签的元素,叫顶级元素。
根元素是没有父标签的顶级元素,而且是唯一个才行。下面我多了一个student元素 ,它直接给我报错。
在这里插入图片描述

1.5、文本区域(CDATE)

格式 <![CDATE[输入你想输入的内容]]>
问题: 我想要<<<<<<<<<<< 但是不想一直写 &lt
CDATA语法可以告诉xml解析器,我CDATE里的文本内容,只是纯文本,不需要xml语法解析。

<author><![CDATA[<<<<<]]>上面的特殊字符用的很秒</author>

2、dom4j

前面我们写xml文件,非常的开心,但我们需要用xml的内容该怎么办捏,这时候就需要xml解析技术。

2.1、配置

我们广快(最近看红警08看多了)溜到他的官网
在这里插入图片描述
下载dom4j-1.6.1和 我特异损了一个和视频同步版本。
很快嗷,我们打开文件夹一看
在这里插入图片描述然后我们溜一溜docs 看1看index 然后quick start 了解下
在这里插入图片描述

那么就让我们快速的来写一些东西来试试看把
在这里插入图片描述
现在,要这个将jar包添加到类路径
在这里插入图片描述

2.2、解释体验

马上创建一个类来开溜,这时候肯定会有家人们会问了,这个SAX是什么东西,其实他是Simpel API for xml 基于事件驱动,读取一行解析一行,不能增删,只能查询。
我们通过创建一个我们通过创建一个SAXReader输入流去读取xml文件,会获得一个document对象。

2.3、获取根元素

document 对象 有一个重要的方法叫 getRootElement() 可以获取到根元素,拿到之后可以进行各种play🥵

2.4、把标签对象转为标签字符串

asXML()

2.5、获取子元素

有两种方法element 和 elements()。
下图,我们拿到根元素对象后,很快嗷,elements()返回一个Elment的集合,就拿到了他的子元素集合,然后狠狠的滴遍历🥵🥵🥵通过asXML(),输出来康康。
在这里插入图片描述

2.6、获取标签中的文本内容

间接取法

获取子元素,使用getText()方法
你的智力会被侮辱,建议别看…
在这里插入图片描述
这时候,聪明的你,肯定会说,欸欸欸,怎么给👴来了一个空指针异常啊,我一看xml文件,嗷↑↓,原来是
在这里插入图片描述
我这第三本书啊,直接把name写成标签属性咯

直接取法

elementText()
在这里插入图片描述
甚至不会出现间接获取的那种错误,找不到就输出null,所以我强烈建议大家使用第二种方法😄


现在刚刚幸幸苦苦写的book类,来使用下
在这里插入图片描述

3、所用到的代码

book类

package com.flzj.pojo;

import java.math.BigDecimal;

public class Book {
    private String sn;
    private String name;
    private BigDecimal price;
    private String author;

    @Override
    public String toString() {
        return "Book{" +
                "sn='" + sn + '\'' +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", author='" + author + '\'' +
                '}';
    }

    public Book(String sn, String name, String author) {
        this.sn = sn;
        this.name = name;
        this.author = author;
    }

    

    public String getSn() {
        return sn;
    }

    public void setSn(String sn) {
        this.sn = sn;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }
}

xml代码

<?xml version="1.0" encoding="utf-8" ?>
<books>
    <book sn="SN123">
        <name>书本1</name>
        <author>我不好说</author>
    </book>
    <book sn="SN124">
        <name>&lt;br&gt;</name>
        <author><![CDATA[<<<<<]]>上面的特殊字符用的很秒</author>
    </book>
    <book sn="SN125" name="这样写成单标签也行"/>
</books>

体验解释的java代码

package com.flzj.pojo;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.util.List;

public class Dom4jTest {
    @Test
    public void test1() throws Exception {
        //创建一个SaxReader输入流,去读取xml配置文件,生成Document对象
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("src/books.xml");
        System.out.println(document);
    }

    @Test
    public void test2() throws DocumentException {
        //读取books.xml 文件
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read("src/books.xml");
        //通过document对象获取<!!!根!!!>元素
        Element rootElement = document.getRootElement();
        //通过根元素获取book标签对象
        //element()和elements()都是通过标签名查找子元素
        List<Element> books = rootElement.elements("book");
        //遍历开溜
        for(Element book : books){
            String sn = book.elementText("sn");
            String name = book.elementText("name");
            String author = book.elementText("author");
            System.out.println(new Book(sn,name,author));
        }
    }
}

4、idea识别xml

👴这里有个问题,👴的xml文件和file文件图标一样,写起来和txt文本一样麻瓜捏,该怎么改捏
在这里插入图片描述
这时候我们只要去File | Settings | Editor | File Types
在这里插入图片描述
在这里插入图片描述
这时候,哈哈哈👴的xml变聪明了,你学会了吗,来试试看
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值