03SGG_JavaWeb_05xml

整理自尚硅谷Javaweb课程(后端)及其笔记js仅用作个人笔记留存

链接:尚硅谷javaWeb课程xml部分

XML简介

xml是可扩展(即可以自定义)的标记性语言

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

XML语法

文档声明

<?xml version="1.0" encoding="utf-8" ?>
<!--
    上面是xml文件的声明
   version="1.0" 表示版本为1.0
   encoding="utf-8" 表示当前xml文件的编码格式
-->
<books>   <!--此处books表示多个图书信息-->
    <book sn="SN123456789"> <!--book表示一个图书的信息,sn表示图书序列号-->
        <name>时间简史</name>   <!--name标签表示书名-->
        <author>霍金</author>    <!--author表示作者-->
        <price>75</price>   <!--price表示图书价格-->
    </book>
    <book sn="SN123456789"> <!--book表示一个图书的信息,sn表示图书序列号-->
        <name>java从入门到入土</name>   <!--name标签表示书名-->
        <author>学习</author>    <!--author表示作者-->
        <price>3125</price>   <!--price表示图书价格-->
    </book>
</books>

注释

与html一样:


元素(标签)

xml元素
  • xml元素是指从开始标签到结束标签的部分

  • 元素可以包含其他元素、文本或者两者的混合物

  • 元素可以拥有属性

xml命名规则
  • 名称可以含有字母数字和其他的字符
  • 不能以数字或者标点符号开始
  • 不能以"xml"开头,其任意大小写也是
  • 名称不能 包含空格
xml分为单标签和双标签
  • 单标签和双标签效力相等

  • 单标签的属性等价于双标签的属性加上内部的子标签所包含的内容


xml属性

  • xml属性可以提供元素的额外信息
  • 标签的属性必须用引号引起来

语法规则

  • 所有xml元素都必须关闭标签

  • xml标签对大小写敏感

  • xml必须正确的嵌套

  • xml必须有根元素

    • 根元素是没有父标签的顶级元素,而且是唯一一个
  • xml的属性值必须加上引号

  • xml特殊字符

    • <
    • >
  • 文本区域(CDATA区)

    • 该区域内只是纯文本,不需要xml语法解析
    • 格式:
      • <![CDATA[**这里可以吧输出的字符原样输出,不会解析**]]

xml解析技术

略,暂时没必要,自己查资料看看即可

Dom4j解析技术

Dom4j类库

GitHub地址:Dom4j


Dom4j文档目录介绍

Dom4j

  • docs

    • 参考文档目录,一般从index界面进入。英文界面
  • lib

    • 其依赖的第三方jar包
  • src

    • 第三方类库的源码和测试代码

获取document对象

准备工作

需要解析的xml文件

<?xml version="1.0" encoding="utf-8" ?>
<!--
    上面是xml文件的声明
   version="1.0" 表示版本为1.0
   encoding="utf-8" 表示当前xml文件的编码格式
-->
<books>   <!--此处books表示多个图书信息-->
    <book sn="SN123456789"> <!--book表示一个图书的信息,sn表示图书序列号-->
        <name>时间简史</name>   <!--name标签表示书名-->
        <author>霍金</author>    <!--author表示作者-->
        <price>75</price>   <!--price表示图书价格-->
    </book>
    <book sn="SN123456789"> <!--book表示一个图书的信息,sn表示图书序列号-->
        <name>java从入门到入土</name>   <!--name标签表示书名-->
        <author>学习</author>    <!--author表示作者-->
        <price>3125</price>   <!--price表示图书价格-->
    </book>
</books>

根据要解析的内容创建的对应对象类

  • 有无参、全部构造器

  • get、set方法

  • toString 方法

    package pojo;
    
    import java.math.BigDecimal;
    
    public class Book {
        private String sn;
        private String name;
        private String author;
        private BigDecimal price;
    
        public Book() {
        }
    
        public Book(String sn, String name, String author, BigDecimal price) {
            this.sn = sn;
            this.name = name;
            this.author = author;
            this.price = price;
        }
    
        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 String getAuthor() {
            return author;
        }
    
        public void setAuthor(String author) {
            this.author = author;
        }
    
        public BigDecimal getPrice() {
            return price;
        }
    
        public void setPrice(BigDecimal price) {
            this.price = price;
        }
    
        @Override
        public String toString() {
            return "Book{" +
                    "sn='" + sn + '\'' +
                    ", name='" + name + '\'' +
                    ", author='" + author + '\'' +
                    ", price=" + price +
                    '}';
        }
    }
    
    
获取对象
  • 创建一个lib目录,并添加dom4j的jar包(以本人使用为例)

    • 添加到类路径: 右键 最下方Add as Library…
    • 设置model权限即可(global全部、Project项目、model模型)
  • 创建测试类

    • 将测试需要的两个junit的jar包添加到lib
      • junit-4.12
      • hamcrest-core-1.3
  • 按照dom4j的文档说明获取对象

package pojo;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.junit.Test;

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

读取xml文件生成java类

package 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 test01() throws DocumentException {
        //创建一个SAXReaders输入流,去读取xml配置文件,生成Document对象
        SAXReader saxReader = new SAXReader();
        //在Junit测试中,相对路径是从模块名开始的
        Document document = saxReader.read("src/01_books.xml");
        System.out.println(document);
    }

    @Test
    public void test02() throws DocumentException {
        //读取book.xml文件
        SAXReader saxReader = new SAXReader();
        //在Junit测试中,相对路径是从模块名开始的
        Document document = saxReader.read("src/01_books.xml");
        //通过document对象获取根元素
        Element rootElement = document.getRootElement();
        //System.out.println(rootElement);
        //通过根元素获取book标签对象
        //element和elements都是通过标签名查找子元素,但是一个是一个,一个是多个
        List<Element> books = rootElement.elements("book");
        //遍历,处理每个book标签对象转化为Book类
        for (Element book : books) {
            //asXML()把标签对象转化为标签字符串
            //System.out.println(book.asXML());
            Element nameElement = book.element("name");
            //getTest()获取标签的文本内容
            String nameText = nameElement.getText();
            //直接获取指定标签的文本内容
            //上述也可直接使用String nameTest = .elementTest("name");
            String priceTest = book.elementText("price");
            String authorTest = book.elementText("author");
            //获取标签属性的文本内容
            String snValue = book.attributeValue("sn");

            System.out.println(new Book(snValue, nameText, authorTest, Double.parseDouble(priceTest)));
        }
    }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值