• 【JavaWeb】第六章 xml


    1、XML简介

    xml是可扩展的标记性语言,xml的主要作用有:

    • 用来保存数据,而且这些数据具有自我描述性
      xml
    • 做为项目或者模块的配置文件
    • 做为网络传输数据的格式(现在以json为主)

    2、xml语法

    🍁xml元素

    
    
    <books>
        <book sn="SN15731108123"> 
            <name>时间简史name> 
            <author>霍金author>
            <price>75price>
        book>
        <book sn="SN15731108456"> 
            <name>JavaWebname> 
            <author>9527author>
            <price>99.9price>
        book>
    books>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    xml注释:

    
    
    • 1

    不同于html元素(标签),xml的元素可以自己定义,命名规则:

    • 可以包含字母、数字以及其他字符
    • 名称不能以数字或者标点符号开始
    • 名称不能以字符xml(或XML、Xml)开始(现在这条不限制了)
    • 名称不能包含空格
    xml也分单标签和双标签
    
    <book name="Java" author="9527" />
    
    • 1
    • 2
    • 3

    和html一样,都有属性来提供元素的额外信息。

    🍺需要注意的是:

    xml文档必须有且只有一个根元素,根元素即没有父标签的元素。

    根元素

    🍁文本区域(CDATA区)

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

    语法:
    
    
    举例:
    <author>
    
    author>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    3、xml解析

    和html一样,xml做为可扩展的标记性语言,也可以使用w3c组织制定的dom技术来解析。

    xml

    document对象表示的是整个文档(可以是html,也可以是xml文档)

    早期的JDK提供了两种xml解析技术:

    • DOM
    • Sax(即Simple API for XML),已过时

    除了以上,还有第三方解析:

    • jdom是在dom的基础上进行了封装
    • dom4j又对jdom进行了封装

    第三方解析需要使用第三方提供的类库。

    4、Dom4j类库的使用

    下载dom4j.jar:

    ①、进入此网址
    ②、进入网址后搜索dom4j:
    download
    download
    download
    下载到本地:
    download
    复制jar包到项目下,右键Add as Library…

    添加dom4j.jar到IDEA

    项目目录

    5、dom4j解析xml

    xml文件内容:

    
    <books>
        <book sn="SN15731108123"> 
            <name>时间简史name>
            <author>霍金author>
            <price>75price>
        book>
        <book sn="SN15731108456"> 
            <name>JavaWebname> 
            <author>9527author>
            <price>99.9price>
        book>
    books>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    根据xml文件,定义Book类:

    package com.code.book;
    
    import java.math.BigDecimal;
    
    public class Book {
        private String  sn;
        private String name;
        private double price;
        private String author;
    
        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 + '\'' +
                    '}';
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59

    定义解析成相关对象的方法:

    import java.util.List;
    
    public class Dom4jTest {
        public static void main(String[] args) throws DocumentException {
            new Dom4jTest().parse();
        }
        /**
         * 读取books.xml文件生成book类
         */
        public void parse() throws DocumentException {
            
           //创建一个SaxReader输入流
            SAXReader reader= new SAXReader();
            //读取books.xml文件,生成Document对象
            Document document = reader.read("xml/src/books.xml");
            //通过Document对象获取根元素
            Element rootElement = document.getRootElement();
            System.out.println(rootElement);
            //通过根元素获取book标签对象
            //element和elements方法都是通过标签名查找子元素,有多个的时候用s
            List<Element> bookList = rootElement.elements("book");
            //遍历,将每个book标签转换为Book类
            for(Element book : bookList){
                //asXML方法是把标签对象转换为标签字符串
                System.out.println(book.asXML());
                //继续用element方法取子元素
                Element nameElement = book.element("name");
                //System.out.println(nameElement.asXML());
                //getText方法可以获取标签中的文本内容
                String nameText = nameElement.getText();
                //也可直接使用elementText方法获取指定标签名的文本内容
                String bookName = book.elementText("name");
                String bookAuthor = book.elementText("author");
                String  bookPrice = book.elementText("price");
                //获取标签属性值
                String snValue = book.attributeValue("sn");
                //从xml中拿到数据以后,new对象
                Book bookObj = new Book(snValue,bookName,Double.parseDouble(bookPrice),bookAuthor);
                System.out.println(bookObj);
    
            }
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    运行效果:
    run

    🍁相关方法提取:

    • getRootElement() 通过document对象获取根元素
    • elements(“tagName”) 通过标签名查找子元素,有多个的时候用s
    • asXML() 把标签对象转换为标签字符串
    • getText() 获取标签中的文本内容
    • elementText("tagName) 获取指定标签名的文本内容
    • attributeValue(“key”) 获取标签属性值
  • 相关阅读:
    Linux网络编程—Day11 高性能服务器程序框架
    信奥中的数学:约数
    python+django+vue+nodejs服装定制商城销售系统
    基于start.spring.io,定制你的Java脚手架
    Python爬虫:为什么你爬取不到网页数据
    Win11安装redis 数据库以及redis desktop manager的下载
    获取请求头数据 工具类
    ​CUDA学习笔记(六)Warp解析
    【第三部分 | 移动端开发】2:流式布局
    Day38 性能测试理论
  • 原文地址:https://blog.csdn.net/llg___/article/details/128135344