JavaWeb之XML文档基础

一、简介

XML:可扩展标记性语言

(1)XML的主要作用

1、用来保存数据,而且这些数据具有自我描述性
2、它还可以作为项目或者模块的配置文件
3、还可以作为网络传输数据的格式(JSON)
(1)第一个XML程序
在这里插入图片描述
在这里插入图片描述

<?xml version="1.0" encoding="utf-8" ?>
<!--version是xml的版本(没有更新过),encoding是xml文件本身的编码-->

<books>   <!--books表示多个图书信息 -->
    <book sn="SN12345">   <!--book表示一个图书信息,sn属性表示图书序列号-->
        <name>时间简史</name>
        <author>霍金</author>
        <price>50</price>
    </book>
    <book sn="SN123456">
        <name>三体全套</name>
        <author>刘慈欣</author>
        <price>150</price>
    </book>
    <book sn="SN1234567">
        <name>Java从入门到放弃</name>
        <author>傻屌老师</author>
        <price>90</price>
    </book>
</books>

(2)xml语法

命名规则:
① 名称可以含字母、数字以及其他的字符
② 名称不能以数字或者标点符号开始
③ 名称不能包含空格

  • XML对大小写敏感
  • XML文档必须有根元素(根元素就是没有父标签的顶级元素,而且是唯一一个,如books,只有一个)
  • 文本区域(CDATA区):CDATA语法可以告诉xml解析器,CDATA里的内容只是纯文本,不需要xml语法解析

(3)XML解析技术(重要)
——XML保存后退出,再次打开,去读取数据叫做解析。

  • 不管是HTML语言还是xml文档,都可以使用w3c组织制定的DOM解析技术来解析。(DOM是将XML文档作为一个树形结构,树叶就是节点)——document对象表示整个文档

  • sun公司在JDK5版本对dom解析技术进行了升级:SAX(simple API for XML)
    它以类似事件机制通过回调告诉用户当前正在解析的内容。它是一行一行地读取xml文件进行解析的,不会创建大量的dom对象。解析时,在内存使用上,和性能上,都优于DOM解析。

  • DOM技术:文档对象模型,需要将整个XML加入内存才能解析,占用内存比较多

  • SAX技术:一边加载,一边解析,一边释放内存,比较节省内存,基于推模式

  • STAX技术:一种至于流的技术,和SAX技术很像,是基于拉模式的

二、使用dom4j解析xml文件,得到 Document 对象

  • 在src中创建class类
  • 添加jar包:创建lib目录,将dom4j的jar包粘贴进去,添加到了类路径(如图)
    在这里插入图片描述
    Level选择:模块库(Module Library)
    (Project是每个模块都能使用)

在这里插入图片描述
需要添加Junit5.4,则将该两个jar包粘贴到lib中去,再同样添加为库
出现警告:将-ea改为--illegal-access=deny在这里插入图片描述

package com.atguigu.pojo;

import org.dom4j.Document;
import org.dom4j.io.SAXReader;
import org.junit.Test;

public class Dom4jTest {
    @Test
    public void test1() throws Exception {
        //创建一个SAXReader输入流,去读取xml配置文件,生成document对象
        SAXReader saxReader = new SAXReader();
        Document document =  saxReader.read("src/books.xml");
        System.out.println(document);

    }
}

//用于解析获取XML文件的内容
package com.atguigu.pojo;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;

import java.math.BigDecimal;
import java.util.List;

public class Dom4jTest {
    @Test
    public void test1() throws Exception {
        //1、创建一个SAXReader输入流,去读取xml配置文件,生成document对象
        SAXReader reader = new SAXReader();
        try{
            Document doc =  reader.read("src/books.xml");
            System.out.println(doc);
        } catch(Exception e){
            e.printStackTrace();
        }
    }
    //2、读取books.xml文件生成Book类
    @Test
    public void test2() throws Exception {
        //(1)读取books.xml文件
        SAXReader reader = new SAXReader();
        Document document = reader.read("src/books.xml");//在Junit测试中,相对路径是从模块名开始算
        //(2)通过文档对象获取根元素books
        Element rootElement = document.getRootElement();
        //System.out.println(rootElement);
        //(3)通过根元素获取book标签对象
        List<Element> books = rootElement.elements("book");//element()和elements()方法都是通过标签名查找子元素,有多个子元素需用elements
        //(4)遍历处理每个book标签转化为book类
        for(Element book : books) {
            //asXML是把标签对象转化为标签字符串
            //getText()方法可以获取标签中的文本内容
            Element nameElement = book.element("name");
            String nameText = nameElement.getText();
            //直接获取指定标签名的文本内容
            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));
        }
    }
}

org.dom4j.tree.DefaultDocument@55ca8de8 [Document: name src/books.xml]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值