【JavaWeb】第六章 xml

有时候,不是因为你没有能力,也不是因为你缺少勇气,只是因为你付出的努力还太少,所以,成功便不会走向你。而你所需要做的,就是坚定你的梦想,你的目标,你的未来,然后以不达目的誓不罢休的那股劲,去付出你的努力,成功就会慢慢向你靠近。

导读:本篇文章讲解 【JavaWeb】第六章 xml,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

1、XML简介

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

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

2、xml语法

🍁xml元素

<?xml version="1.0" encoding="utf-8" ?>
<!--
    以上为xml文件的声明
    version="1.0" 表示xml的版本
    encoding="utf-8" 表示xml文件本身的编码方式
-->
<books><!--books表示多个图书信息-->
    <book sn="SN15731108123"> <!--book表示一个图书信息,sn属性表示图书的序列号-->
        <name>时间简史</name> <!--name标签表示书名-->
        <author>霍金</author>
        <price>75</price>
    </book>
    <book sn="SN15731108456"> 
        <name>JavaWeb</name> 
        <author>9527</author>
        <price>99.9</price>
    </book>
</books>

xml注释:

<!--和html一样-->

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

  • 可以包含字母、数字以及其他字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字符xml(或XML、Xml)开始(现在这条不限制了)
  • 名称不能包含空格
xml也分单标签和双标签

<book name="Java" author="9527" />

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

🍺需要注意的是:

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

根元素

🍁文本区域(CDATA区)

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

语法:
<![CDATA[xxx]]>

举例:
<author>
<![CDATA[<<这里的小于号不被xml解析]]>
</author>

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文件内容:

<?xml version="1.0" encoding="utf-8" ?>
<books>
    <book sn="SN15731108123"> 
        <name>时间简史</name>
        <author>霍金</author>
        <price>75</price>
    </book>
    <book sn="SN15731108456"> 
        <name>JavaWeb</name> 
        <author>9527</author>
        <price>99.9</price>
    </book>
</books>

根据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 + '\'' +
                '}';
    }
}

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

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);

        }

    }
}

运行效果:
run

🍁相关方法提取:

  • getRootElement() 通过document对象获取根元素
  • elements(“tagName”) 通过标签名查找子元素,有多个的时候用s
  • asXML() 把标签对象转换为标签字符串
  • getText() 获取标签中的文本内容
  • elementText(“tagName) 获取指定标签名的文本内容
  • attributeValue(“key”) 获取标签属性值

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/146095.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!