XML

1.XML 简介

1.1什么是 xml?

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

1.2xml 的作用?

xml 的主要作用有:
1、用来保存数据,而且这些数据具有自我描述性
2、它还可以做为项目或者模块的配置文件
3、还可以做为网络传输数据的格式(现在 JSON 为主)

1.3xml 语法 (具体不再介绍)

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

示例:

<?xml version="1.0" encoding="utf-8" ?>
<!-- xml声明 version是版本的意思   encoding是编码  -->
<books>
    <book sn="SN001">
        <name>java从入门到超神1</name> <!-- book表示一个图书信息  sn属性表示图书序列号-->
        <author>李明</author>
        <price>66</price>
    </book>
    <book sn="SN002">
        <name>java从入门到超神2</name> <!-- book表示一个图书信息  sn属性表示图书序列号-->
        <author>
            <!--文本区域(CDATA 区)
            CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要 xml 语法解析
            CDATA 格式: <![CDATA[ 这里可以把你输入的字符原样显示,不会解析 xml ]]>
            -->
            <![CDATA[
            <<<>>>>>>李明
            ]]>
        </author>
        <price>66</price>
    </book>

    <!--xml支持单标签 ,双标签-->
    <book sn="SN003" name="java从入门到超神3" author="李明" price="68" />
</books>

2、xml 解析技术介绍

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

在这里插入图片描述

3、dom4j 解析技术(重点*****)

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

3.2、dom4j 目录的介绍:

1)docs 是 文 档 目 录
在这里插入图片描述
如何查 Dom4j 的文档
在这里插入图片描述
Dom4j 快速入门
在这里插入图片描述
2)lib 目录 -----存放第三方jar包
3)src 目录是第三方类库的源码目录

3.3、dom4j 编程步骤:

第一步: 先加载 xml 文件创建 Document 对象
第二步:通过 Document 对象拿到根元素对象
第三步:通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象。
第四步:找到你想要修改、删除的子元素,进行相应在的操作 第五步,保存到硬盘上

3.4、获取 document 对象

创建一个 lib 目录,并添加 dom4j 的 jar 包。并添加到类路径。
在这里插入图片描述
需要解析的 books.xml 文件内容

<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book sn="SN12341232">
		<name>辟邪剑谱</name>
		<price>9.9</price>
		<author>班主任</author>
	</book>
	<book sn="SN12341231">
		<name>葵花宝典</name>
		<price>99.99</price>
		<author>班长</author>
	</book>
</books>

解析获取 Document 对象的代码
第一步,先创建 SaxReader 对象。这个对象,用于读取 xml 文件,并创建 Document

/** dom4j 获取 Documet 对象 */
	 @Test
    public void test1() throws Exception {
        //1.创建一个SaxReader输入流,去读取xml配置文件,生成Document对象
        SAXReader saxReader = new SAXReader();

        //2. 这个对象用于读取 xml 文件,然后返回一个 Document
        Document document = saxReader.read("src/books.xml");

        // 3.打印到控制台,看看是否创建成功
        System.out.println(document);
    }

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

需要分四步操作:
第一步,通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象
第二步,通过 Document 对象。拿到 XML 的根元素对象
第三步,通过根元素对象。获取所有的 book 标签对象
第四步,遍历每个 book 标签对象。然后获取到 book 标签对象内的每一个元素,再通过 getText() 方法拿到起始标签和结 束标签之间的文本内容。

JavaBean:

public class Book {
    private String sn;
    private String name;
    private BigDecimal price;
    private String author;

    public Book(String sn, String name, BigDecimal price, String author) {
        this.sn = sn;
        this.name = name;
        this.price = price;
        this.author = author;
    }

    public Book() {
    }

    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 BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal 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 + '\'' +
                '}';
    }
}
@Test
    public void test2() throws Exception {

        //1.读取xml文件,生成Document对象
        SAXReader reader = new SAXReader();
        Document document = reader.read("src/books.xml");

        //2.通过document对象那个获取根元素
        Element rootElement = document.getRootElement();
//        System.out.println(rootElement);

        //3.通过根元素获取book标签对象
        //element()和elements()都是通过标签名查找子元素
        List<Element> books = rootElement.elements("book");

        //4.遍历,处理每个book标签转换为BOOk类
        for (Element book : books){
            //把标签对象转换为标签字符串

            //方法1(先获取book的子元素,再通过 子元素.getText()获取文本内容)
            Element nameElement = book.element("name");
            //getText(): 获取标签名的文本内容
            String nameText = nameElement.getText();
            //System.out.println(nameText);

            //方法2:elementText():直接通过标签名获取 标签名内的文本内容
            String priceText = book.elementText("price");

            String authorText = book.elementText("author");

            //获取book的属性值
            String snText = book.attributeValue("sn");

            System.out.println(new Book(snText, nameText, new BigDecimal(priceText), authorText));//new BigDecimal(priceText): 将String转换为BigDecimal数据

        }
    }

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值