JavaWeb之XML简单使用

该文档是:xml简单使用

博客连接:https://www.loveuluo.cn

日期:2020-12-03

1. XML简介

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

xml 的主要作用有:

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

2. XML语法

2.1 文档声明

我们先创建一个简单 XML 文件,用来描述图书信息。

1 )创建一个 xml 文件

image-20201203193058230

文件名:

image-20201203193108293

image-20201203193115463

2 )图书有 id 性 属性 一 表示唯一

<?xml version="1.0" encoding="utf-8" ?>
<!-- xml声明 version是版本的意思   encoding是编码  -->
<books> <!-- 这是xml注释 -->
    <book id="SN123123413241"> <!-- book标签描述一本图书   id属性描述 的是图书 的编号  -->
        <name>java编程思想</name> <!-- name标签描述 的是图书 的信息 -->
        <author>华仔</author>       <!-- author单词是作者的意思 ,描述图书作者 -->
        <price>9.9</price>    <!-- price单词是价格,描述的是图书 的价格 -->
    </book>
    <book id="SN12341235123">  <!-- book标签描述一本图书   id属性描述 的是图书 的编号  -->
        <name>葵花宝典</name>  <!-- name标签描述 的是图书 的信息 -->
        <author>班长</author>    <!-- author单词是作者的意思 ,描述图书作者 -->
        <price>5.5</price> <!-- price单词是价格,描述的是图书 的价格 -->
    </book>
</books>

2.2 元素(标签)

咱们先回忆一下:
html 标签:

格式:<标签名>封装的数据</标签名>
单标签: <标签名 /> <br /> 换行 <hr />水平线
双标签 <标签名>封装的数据</标签名>
标签名大小写不敏感
标签有属性,有基本属性和事件属性
标签要闭合(不闭合 ,html 中不报错。但我们要养成良好的书写习惯。闭合)

1 )什么是 xml 元素

image-20201203193503416

2 )XML 命名规则

image-20201203193543245

image-20201203193553993

image-20201203193601525

image-20201203193607223

3 )xml 也 中的元素(标签也 分成 单标签和双标签)

image-20201203193803831

2.3 XML 属性

xml 的标签属性和 html 的标签属性是非常类似的, 属性可以提供元素的额外信息

**在标签上可以书写属性:**

一个标签上可以书写多个属性。用 每个属性的值必须使用 号 引号 引起来。

image-20201203194212498

1)属性必须使用引号引起来,不引会报错示例代码

image-20201203194234576

2.4 语法规则

所有 XML 元素都须有关闭标签:

image-20201203194317547

XML 标签对大小写敏感:

image-20201203194338257

XML 必须正确地嵌套:

image-20201203194351368

XML 文档必须有根元素:

根元素就是顶级元素,
没有父标签的元素,叫顶级元素。
根元素是没有父标签的顶级元素,而且是唯一一个才行。

image-20201203194415808

XML 的属性值须加引号:

image-20201203194457144

XML 中的特殊字符:

image-20201203194545497

文本区域(CDATA 区)

image-20201203194628374

image-20201203194638424

3. XML解析技术介绍

xml 可扩展的标记语言。

**不管是 html 文件还是 xml 文件它们都是标记型文档,都可以使用 w3c 组织制定的 dom 技术来解析。**

image-20201203195036298

image-20201203195055467

4. dom4j 解析技术(重要)

由于 dom4j 它不是 sun 公司的技术,而属于第三方公司的技术,我们需要使用 dom4j 就需要到 dom4j 官网下载 dom4j的 jar 包。

4.1 Dom4j 类库的使用 类库的使用

image-20201203195259126

解压后:

image-20201203195308495

4.2 dom4j 目录的介绍

1 )docs 是文档目录

image-20201203195438719

2)如何查 Dom4j 的文档

image-20201203195504377

3 )Dom4j 快速入门

image-20201203195521535

4 )lib 目录

image-20201203195549303

5 )src 目录是第三方类库的源码目录

image-20201203195605536

4.3 dom4j 编程步骤

image-20201203195645311

4.3.1 遍历 、遍历 签 标签 获取所有标签中的内容

image-20201203200328905

需要解析的 books.xml 文件内容

<?xml version="1.0" encoding="UTF-8"?>
    <books>
        <book sn="SN12341232">
            <name>辟邪剑谱</name>
            <price>9.9</price>
            <author>班主任</author>
        </book>
        <book sn="SN12341231">
            <name>葵花宝典</name>
            <price>99.99</price>
            <author>班长</author>
        </book>
    </books>

每一个book标签需要解析成为一个book类,首先第一步创建一个book类(跟book标签所对应的信息形成一个对应关系

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

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

    public Book() {
    }
    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;
    }
    @Override
    public String toString() {
        return "Book{" +
                "sn='" + sn + '\'' +
                ", name='" + name + '\'' +
                ", price=" + price +
                ", author='" + author + '\'' +
                '}';
    }
}

遍历 、遍历 签 标签 获取所有标签中的内容(重点)

需要分四步操作:
第一步,通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象
第二步,通过 Document 对象。拿到 XML 的根元素对象
第三步,通过根元素对象。获取所有的 book 标签对象
第四步,遍历每个 book 标签对象。然后获取到 book 标签对象内的每一个元素。

第五步,把这些数据转换成book对象

@Test
public void test2() throws Exception {
    // 需要分四步操作:
    // 第一步,通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象
    SAXReader reader = new SAXReader();
    Document document = reader.read("src/books.xml");

    // 第二步,通过 Document 对象。拿到 XML 的根元素对象
    Element root = document.getRootElement();
    // 打印测试 (org.dom4j.tree.DefaultElement@39ed3c8d [Element: <books attributes: []/>]) 拿到了books
    System.out.println(root);

    // 第三步,通过根元素(books)对象。获取所有的 book 标签对象
    // Element.elements(标签名)它可以拿到当前元素下的指定的子元素的集合
    List<Element> books = root.elements("book"); //得到所有book标签对象

    // 第四步,遍历每个 book 标签对象。然后获取到 book 标签对象内的每一个元素,处理每个book标签转换为book类
    for (Element book : books) {
        // 拿到 book 下面的 name 元素对象
        Element nameElement = book.element("name"); //<name>xxx</name>
        // 拿到 book 下面的 price 元素对象
        Element priceElement = book.element("price"); //<price>xxx</price>
        // 拿到 book 下面的 author 元素对象
        Element authorElement = book.element("author"); //<author>xxx</author>
        // 获取book的属性值
        String sn = book.attributeValue("sn");

        // 第五步,把这些数据转换成book对象
        //每个元素的getText方法代表获取元素中的值 例如:
        //<name>辟邪剑谱</name> 那么辟邪剑谱就是name元素的值
        //因为price需要的是BigDecimal,所以把获取到的数字转化成BigDecimal
        BigDecimal price = BigDecimal.valueOf(Double.parseDouble(priceElement.getText()));
        System.out.println(new Book(sn,nameElement.getText(),price,authorElement.getText()));
    }
}

输出的结果为:

image-20201203210023199

最后修改:2020 年 12 月 04 日 09 : 52 AM
如果觉得我的文章对你有用,请随意赞赏