Java Web(3)-XML

一、XML简介

1. 什么是xml?

xml 是可扩展的标记性语言

2. xml的作用?

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

二、XML语法

首先创建一个xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!--
    文件的声明
    version="1.0"        表示xml的版本
    encoding="UTF-8"     表示xml文件本身的编码
-->

图书有 标识,书名,有作者,价格的信息

<?xml version="1.0" encoding="UTF-8" ?>
<!--
    文件的声明
    version="1.0"        表示xml的版本
    encoding="UTF-8"     表示xml文件本身的编码
-->

<!-- 多个图书信息-->
<books>

    <!--一个图书的基本信息-->
    <book sn="SN123454321">    <!--属性值-->
        <name>雍正王朝</name>
        <author>二月河</author>
        <price>99</price>
    </book>

    <book sn="SN987654321">
        <name>康熙大帝</name>
        <author>二月河</author>
        <price>99</price>
    </book>
</books>
  • 注释和html一样
  • 其他的基本上看看就懂了

注意:

  • XML 文档必须有根元素,并且是唯一的,就如上面的books一样,

三、XML解析

这里主要就使用dom4j技术来解析

首先需要到官网找到这个jar包,直接复制到当前的模块下即可

1. Dom4j编程步骤

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

2. 获取document对象

1. 首先创建一个lib包,直接把网上找到的dom4j的jar包复制到lib下,然后

2. 写一个需要解析的books.xml文件

<?xml version="1.0" encoding="UTF-8" ?>

<books>
    <book sn="SN123454321">
        <name>雍正王朝</name>
        <author>二月河</author>
        <price>99</price>
    </book>

    <book sn="SN987654321">
        <name>康熙大帝</name>
        <author>二月河</author>
        <price>99</price>
    </book>
</books>

3. 获取Document对象的代码

@Test
    public void test1() throws DocumentException {

        // 1. 先创建一个SAXReader对象
        SAXReader saxReader = new SAXReader();
		// 2. 这个对象用来读取xml文件,返回一个document
        Document read = saxReader.read("src/books.xml");
		// 3. 打印到控制台,查看是否成功
        System.out.println(read);

    }

3. 遍历标签获取内容

需要分四步操作:

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

首先写一个Book类,用于存放数据

package com.md.java;
/**
 * @author MD
 * @create 2020-07-24 8:45
 */
public class Book {
    private String sn;
    private String name;
    private String author;
    private Double price;

    public Book() {
    }

    public Book(String sn, String name, String author, Double 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 Double getPrice() {
        return price;
    }

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

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

读取xml文件中的内容,xml文件就是上面的books.xml

    /**
     * 读取books.xml文件生成的Book类
     */
    @Test
    public void test2() throws DocumentException {
        // 1. 读取文件,在Junit测试中,相对路径是从模块名开始的
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.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){
            // asXML()把标签对象转换为标签字符串
            // System.out.println(book.asXML());

            // 5. 获取到了这个标签
            Element nameElement = book.element("name");
            // 获取这个标签的文本内容
            String name = nameElement.getText();

            // 或者可以直接获取标签里的文本内容
            String price = book.elementText("price");
            String author = book.elementText("author");

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


            // 获取完成之后就可以生成了,注意价格是double类型的
            System.out.println(new Book(sn,name,author,Double.parseDouble(price)));

        }

    }
posted @ 2020-07-25 21:26  达达i  阅读(279)  评论(0编辑  收藏  举报