当前位置:网站首页>技术点5:XML语言

技术点5:XML语言

2020-11-09 22:18:22 郭少

xml

一、XML 简介

什么是 xml?

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

xml 的作用?

  1.用来保存数据,而且这些数据具有自我描述性;

  2.它可以作为项目或者模块的配置文件;

  3.还可以作为网络传输数据的格式(现在以JSON为主)。

二、xml 语法

1、文档声明

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

①创建一个XML文件

 

 输入文件名:

 

 ②books.xml文件存放图书信息。(图书有 id 属性 表示唯一 标识,书名,有作者,价格的信息)

<?xml version="1.0" encoding="utf-8" ?>
<!--xml的声明,version:版本  encoding:编码-->
<books>
    <book id="sn7384378"><!-- book用来描述一本书,id属性描述图书的编号 -->
        <name>java编程思想</name>
        <author>小张</author>
        <price>9.9</price>
    </book>
    <book id="sn3785738">
        <name>西游记</name>
        <author>吴承恩</author>
        <price>99</price>
    </book>
</books>

在浏览器中可以查看到文档:

 

 

2、xml 注释

  xml的注释和HTML是一样的:<!-- 注释内容 -->

3、元素(标签)

什么是 xml 元素 ?

  xml元素指的是从开始标签到结束标签的部分。元素可以包含其它元素、文本或两者的混合物。元素也可以拥有属性。

XML 命名规则:

  ①名称可以含字母、数字以及其他的字符;

  ②名称不能以数字或标点符号开始;

  ③名称不能包含空格;

xml 中的元素(标签)也 分成 单标签和双标签:
单标签:
    <标签名 属性名="属性值" />

双标签:
    <标签名 属性名="属性值">
        封装的数据
    </标签名>

 

 

4、xml 属性

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

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

5、语法规则

  ①所有的xml标签,无论单标签还是双标签,都必须闭合。

  ②xml标签对大小写敏感。

  ③xml标签必须正确的嵌套。

  ④XML 文档必须有根元素

    根元素就是顶级元素,

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

 

   ⑤xml的属性值必须加引号。

  ⑥xml中的特殊字符:

  

   ⑦文本区域(CDATA 区) 

    CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要 xml 语法解析。

    CDATA 格式:

       <![CDATA[ 这里可以把你输入的字符原样显示,不会解析 xml ]]>

 

 

三、xml 解析技术介绍

xml 可扩展的标记语言。
不管是 html 文件还是 xml 文件它们都是标记型文档,都可以使用 w3c 组织制定的 dom 技术来解析。
document 对象表示的是整个文档(可以是 html 文档,也可以是 xml 文档)

 

 四、dom4j 解析技术(重点*****

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

的 jar 包。 

1、Dom4j 类库的使用

 

 解压后:

 

 

2、dom4j 目录的介绍

docs 是 文 档 目 录

 

 

如何查 Dom4j 的文档

 

 

Dom4j 快速入门

 

 

lib 目录

 

 src目录是dom4j的源码目录

 

 

3、dom4j 编程步骤:

 

 

4、获取 document 对象

  创建一个 lib 目录,添加 dom4j 的 jar 包,并添加到类路径:

 

  准备需要解析的books.xml文件(此文件在src下):
<?xml version="1.0" encoding="utf-8" ?>
<!--xml的声明,version:版本  encoding:编码-->
<books>
    <book id="sn7384378"><!-- book用来描述一本书,id属性描述图书的编号 -->
        <name>java编程思想</name>
        <author>小张</author>
        <price>9.9</price>
    </book>
    <book id="sn3785738">
        <name>西游记</name>
        <author>吴承恩</author>
        <price>99</price>
    </book>
</books>

  获取document对象:

public class dom4jTest {
    @Test
    public void getDocument() throws DocumentException {
        //1.创建一个SAXReader对象
        SAXReader reader = new SAXReader();
        //2.这个对象用于读取xml文件,返回Document
        Document document = reader.read("src/books.xml");
        //3.打印,查看是否创建成功
        System.out.println(document);
    }
}

效果如下:

 

 

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

 Book.java文件:

public class Book {
    private String id;
    private String name;
    private String author;
    private Double price;

    public Book() {
    }

    public Book(String id, String name, String author, Double price) {
        this.id = id;
        this.name = name;
        this.author = author;
        this.price = price;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getAuthor() {
        return author;
    }

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

    public Double getPrice() {
        return price;
    }

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

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

dom4j解析测试类:

public class dom4jTest {
    @Test
    public void readXml() throws DocumentException {
        //1.创建一个SAXReader对象
        SAXReader reader = new SAXReader();
        Document document = reader.read("src/books.xml");
        //2.通过document对象,拿到xml的根元素对象
        Element rootElement = document.getRootElement();
        //打印测试
//        System.out.println(rootElement.asXML());
        //3.通过根元素对象,获取所有的book标签对象构成的集合
        List<Element> books = rootElement.elements("book");
        //4.遍历books,获取每一个book对象
        for (Element book : books){
            //拿到book的属性值
            String sn = book.attributeValue("sn");
            //拿到book下面的name元素中的内容
            Element name = book.element("name");
            String nameText = name.getText();
            //拿到book下面的author元素中的内容
            Element author = book.element("author");
            String authorText = author.getText();
            //拿到book下面的price元素中的内容
            Element price = book.element("price");
            String priceText = price.getText();
            //将获取到的数据封装成一个Book对象
            Book b = new Book(sn, nameText, authorText, Double.parseDouble(priceText));
            System.out.println(b);
        }
    }
}

效果如下:

 

版权声明
本文为[郭少]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/897463196-a/p/13950578.html