XML技术

XML

基本介绍

  • XML是可扩展的标记性语言

有两组数据转换成xml格式:
image.png
:::tips
XML的作用:

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

xml语法

  1. 文档声明
  2. 元素(标签)
  3. xml属性
  4. xml注释
  5. 文本区域(CDATA区)
文档声明
<?xml version="1.0" encoding="UTF-8"?>

:::tips
以上的格式就是xml的声明,version是版本的意思,encoding是文件编码格式
:::

<?xml version="1.0" encoding="utf-8" ?>
<!--
    <?xml version="1.0" encoding="utf-8" ?>
    以上内容就是xml文件的声明,即告诉他人我就是xml文件

    version="1.0"           version表示xml的版本
    encoding="utf-8"        encoding表示xml文件本身的编码
-->
<books> <!--books 表示多个图书信息-->
    <book sn="SN1234123132"> <!--book表示一个图书信息, sn属性表示图书序列化-->
        <name>时间简史</name> <!--name标签表示书名-->
        <author>霍金</author> <!--author标签表示作者-->
        <price>75</price> <!--price标签表示价格-->
    </book>

    <book sn="SN1234123131"> <!--book表示一个图书信息, sn属性表示图书序列化-->
        <name>Java从入门到放弃</name> <!--name标签表示书名-->
        <author>
            <![CDATA[
                <<<<<<<<<<<老沙
            ]]>
        </author> <!--author标签表示作者-->
        <price>9.9</price> <!--price标签表示价格-->
    </book>
    <book sn="SN1234123133" name="辟邪剑谱" author="林平之" price="99999"/>
</books>
  • xml文件可以在浏览器中显示

image.png

  • 注意,xml格式是强类型的,一旦有问题就会在编译器上报错
xml注释
  • xml的注释和html的注释一样,都是
元素(标签)
html标签

:::tips
html标签:
格式:<标签名>封装的数据</标签名>
单标签: <标签名 />
换行


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

xml元素

image.png
:::tips
元素是指从开始标签到结束标签的内容
例如:Java编程思想
:::

xml命名规则
  • XML元素必须遵循以下命名规则:
1、名称可以含字母、数字以及其他的字符

image.png

2、名称不能以数字或者标点符号开始

image.png

3、名称可以以字符“xml”或者(XML、Xml)开始

image.png

4、名称不能包含空格

image.png

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

image.png

xml属性

:::tips
xml的标签属性和html的标签属性是非常类似的,属性可以提供元素的额外信息
在标签上可以书写属性:
一个标签上可以书写多个书写,每个书写的值必须要使用“引号”引起来
:::
image.png
image.png

语法规则
1、所有XML元素都须有关闭标签(也就是闭合)

image.png

2、XML标签对大小写敏感

image.png

3、XML必须正确地嵌套

image.png

4、XML文档必须有根元素

:::tips
根元素就是顶级元素
没有父标签的元素,叫顶级元素
根元素是没有父标签的顶级元素,而且是唯一一个才行
:::
image.png

5、XML的属性值须加引号

image.png

6、XML中的特殊字符

image.png

7、文本区域(CDATA区)

:::tips
CDATA语法可以告诉xml解析器,我CDATA里的文本内容,只是纯文本,不需要xml语法解析
格式:
<![CDARA[ 这里可以把你输入的字符原样显示,不会解析xml ]]>
:::
image.png

xml解析技术介绍

:::tips
xml 可扩展的标记语言
不管是 html 文件还是 xml 文件它们都是标记型文档,都可以使用 w3c 组织制定的 dom 技术来解析
image.png

  • document对象表示的是整个文档(可以是html文档,也可以是xml文档)
    :::
    :::tips
    **早期 JDK 为我们提供了两种 xml 解析技术 DOM 和 Sax 简介(已经过时,但我们需要知道这两种技术) **
    dom 解析技术是 W3C 组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。
    Java 对 dom 技术解析标记也做了实现。
    sun 公司在 JDK5 版本对 dom 解析技术进行升级:SAX( Simple API for XML )
    SAX 解析,它跟 W3C 制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的内容。
    它是一行一行的读取 xml 文件进行解析的。不会创建大量的 dom 对象。
    所以它在解析 xml 的时候,在内存的使用上。和性能上。都优于 Dom 解析。
    第三方的解析:
    jdom 在 dom 基础上进行了封装 、
    **dom4j **又对 jdom 进行了封装。
    pull 主要用在 Android 手机开发,是在跟 sax 非常类似都是事件机制解析 xml 文件
    :::

dom4j解析技术(重点)

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

dom4j类库的使用

image.png

dom4j目录的介绍
  • docs是文档目录

image.png

  • 查看dom4j的文档

image.png

  • dom4j快速入门

image.png

  • lib目录

image.png

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

image.png

dom4j编程步骤

:::tips
**第一步: 先加载 xml 文件创建 Document 对象 **
**第二步:通过 Document 对象拿到根元素对象 **
**第三步:通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象 **
**第四步:找到你想要修改、删除的子元素,进行相应在的操作 **
第五步,保存到硬盘上
:::

获取document对象
  • Books类
package com.zanedu.pojo;

import java.math.BigDecimal;

public class Book {

    private String sn;
    private String name;
    private double price;
    private String author;

    public Book() {
    }

    public Book(String sn, String name, double price, String author) {
        this.sn = sn;
        this.name = name;
        this.price = price;
        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 double getPrice() {
        return price;
    }

    public void setPrice(double 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 + '\'' +
            '}';
    }
}
  • 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>
  • 测试类
@Test
public void test1() throws DocumentException {
    // 创建一个SAXReader输入流,取读取xml配置文件,生成Document
    SAXReader saxReader = new SAXReader();
    
    Document document = saxReader.read("src/books.xml");
    
    System.out.println(document);
}

image.png

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

:::tips
**需要分四步操作: **
**第一步,通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象 **
**第二步,通过 Document 对象。拿到 XML 的根元素对象 **
**第三步,通过根元素对象。获取所有的 book 标签对象 **
第四小,遍历每个 book 标签对象。然后获取到 book 标签对象内的每一个元素,再通过 getText() 方法拿到起始标签和结束标签之间的文本内容
:::

/**
 * 读取books.xml文件生成book类
 */
@Test
public void test2() throws DocumentException {
    //1. 读取books.xml文件
    SAXReader reader = new SAXReader();
    //2. 通过Document对象获取根元素
    //在Junit测试中,相对路径是从模块名开始算,即05_xml
    Document document = reader.read("src/books.xml");
    //3. 通过根元素获取book标签对象
    Element rootElement = document.getRootElement();
//        System.out.println(rootElement);//org.dom4j.tree.DefaultElement@1a04f701 [Element: <books attributes: []/>]
    //element() 和 elements() 都是通过标签名查找子元素
    List<Element> books = rootElement.elements("book");

    //4. 遍历,处理每个book标签转换为Book类
    for (Element book : books) {
        //asXML() 把标签对象,转换成标签字符串
        Element name = book.element("name");
        //getText() 可以获取标签中的内容
        String nameText = name.getText();

        //elementText() 直接获取指定标签名的文本内容
        String priceText = book.elementText("price");
        String authorText = book.elementText("author");

        String snValue = book.attributeValue("sn");

        System.out.println(new Book(snValue, nameText, Double.parseDouble(priceText), authorText));
    }
}

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itzzan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值