可扩展标记语言 XML

1,127 阅读4分钟

这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战


1、XML 简介

什么是xml?

可扩展标记语言,标准通用标记语言的子集,简称XML。是一种用于标记电子文件使其具有结构性的标记语言。

在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。

xml 的作用?

XML 被设计用来传输和存储数据。


2、XML 语法

  1. 文档声明。
  2. 元素(标签)
  3. xml 属性
  4. xml 注释
  5. 文本区域(CDATA 区)

注:

  1. 不同于html,所有XML 元素都须有关闭标签(也就是闭合)
  2. XML 标签大小写敏感
  3. XML 必须正确地嵌套
  4. XML 文档必须有唯一的根元素,也就是顶级元素
  5. XML 的属性值须加引号
  6. XML 中的特殊字符的表示方法与html一样

2.1文档声明

创建一个 xml 文件

<?xml version="1.0" encoding="utf-8" ?>
<!-- xml 声明 version 是版本的意思 encoding 是编码 -->

属性

  1. version 是版本号
  2. encoding 是 xml 的文件编码
  3. standalone="yes/no" 表示这个 xml 文件是否是独立的 xml 文

2.2 元素(标签)

2.2.1 什么是 XML 元素?

XML 元素 指的是从(且包括)开始标签直到(且包括)结束标签的部分。

元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性。xml元素类似html标签

<bookstore>
<book category="CHILDREN">
  <title>Harry Potter</title> 
  <author>J K. Rowling</author> 
  <year>2005</year> 
  <price>29.99</price> 
</book>
<book category="WEB">
  <title>Learning XML</title> 
  <author>Erik T. Ray</author> 
  <year>2003</year> 
  <price>39.95</price> 
</book>
</bookstore> 

在上例中, 和 都拥有元素内容,因为它们包含了其他元素。 只有文本内容,因为它仅包含文本。

在上例中,只有 元素拥有属性 (category="CHILDREN")。

2.2.2 XML 命名规则

XML 元素必须遵循以下命名规则:

  • 名称可以含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字符 “xml”(或者 XML、Xml)开始
  • 名称不能包含空格

可使用任何名称,没有保留的字词。


2.3 xml 属性

XML 元素可以在开始标签中包含属性,类似 HTML。

属性 (Attribute) 提供关于元素的额外信息。

属性值必须被引号包围

<!-- sex 是一个属性 -->
<person sex="female">
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person> 

<!-- sex 是一个子元素 -->
<person>
  <sex>female</sex>
  <firstname>Anna</firstname>
  <lastname>Smith</lastname>
</person> 

在第一个例子中,sex 是一个属性。在第二个例子中,sex 则是一个子元素。两个例子均可提供相同的信息。


2.4 xml 注释

html 和 XML 注释 一样 :

<!-- 注释 -->

2.5 文本区域(CDATA 区)

CDATA 里的文本内容,只是纯文本,不会被xml语法解析

CDATA 格式:

 <![CDATA[纯文本原样显示]]]>

例:

<?xml version="1.0" encoding="utf-8" ?>
<!-- xml 声明 version 是版本的意思 encoding 是编码 -->
<BOOK>
    <![CDATA[纯文本原样显示]]]>
</BOOK>

3、XML解析技术—dom4j★

3.1 下载【dom4j】jar包

下载地址:dom4j.github.io/

image-20210504192938835

下载之后,创建一个 lib 目录,并添加 dom4j 的 jar 包。并添加到类路径。【dom4j 】jar 包就导入完成了


3.2 dom4j 编程步骤

  1. 先加载 xml 文件创建 Document 对象
  2. 通过 Document 对象拿到根元素对象
  3. 通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象
  4. 找到你想要修改、删除的子元素,进行相应操作

【student.xml】

<?xml version="1.0" encoding="utf-8" ?>
<!-- xml 声明 version 是版本的意思 encoding 是编码 -->

<students>
    <student sn="2020020197">       <!-- sn属性为学号-->
        <name>冯诺依曼</name>       <!-- name标签为姓名-->
        <age>20</age>           <!-- age标签为年龄-->
    </student>

    <student sn="2020020198">       <!-- sn属性为学号-->
        <name>图灵</name>          <!-- name标签为姓名-->
        <age>22</age>           <!-- age标签为年龄-->
    </student>
</students>

【Student.java】

public class Student {
    private String sn;
    private String name;
    private int age;

    public Student(String sn, String name, int age) {
        this.sn = sn;
        this.name = name;
        this.age = age;
    }

    public Student() {
    }

    @Override
    public String toString() {
        return "Student{" +
                "sn='" + sn + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    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 int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

解析XML文件

    public void getDocument() throws DocumentException {
        // 1.通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象
        SAXReader reader = new SAXReader();
        Document document = reader.read("src/student.xml");

        // 2.通过 Document 对象。拿到 XML 的根元素对象
        Element root = document.getRootElement();

        // 3.通过根元素对象。获取所有的 book 标签对象
        List<Element> students = root.elements("student");

        // 4.遍历每个 student 标签对象。然后获取到 student 标签对象内的每一个元素
        for (Element student : students) {
            //elementText("name") 获取name标签的文本内容
            String nameText = student.elementText("name");
            //elementText("age") 获取age标签的文本内容
            String ageText = student.elementText("age");
            //attributeValue() 获取sn属性的文本内容
            String snValue = student.attributeValue("sn");

            //实例化javabean类接收
            System.out.println(new Student(snValue, nameText, Integer.parseInt(ageText)));
        }

    }

应对梦想道路上的困苦艰难坎坷,执著是最好的利刃,它会帮忙一个人劈开艰难,穿越困境,抵达铺满鲜花的梦想