一文XML简单入门

Xml

什么是xml?

xml是可扩展的标记性语言

xml的作用?

1.可以用来保存数据,而且这些数据具有自我 描述性

2.它还可以作为项目或者模块的配置文件 (spring框架的配置文件application.xml等)

3.还可以作为网络数据传输的数据格式(现在以JSON为主)

声明文档

我们先创建一个简单的xml文件,用来描述图书信息

<?xml version="1.0" encoding="utf-8" ?>
<!--以上内容就是xml文件的声明
    version="1.0"   表示xml的版本
    encoding="utf-8" 表示xml文件本身的编码-->
<books>
    <book sn="SN123123"> <!--book表示一个图书的信息 sn表示图书的编号-->
        <name>java入门</name>  <!--name表示书名-->
        <author>小二</author>   <!--作者-->
        <price>68.9</price>     <!--价格-->
    </book>
    <book sn="SN123123"> <!--book表示一个图书的信息 sn表示图书的编号-->
        <name>c语言入门</name>  <!--name表示书名-->
        <author>小三</author>   <!--作者-->
        <price>16.8</price>     <!--价格-->
    </book>
</books>

xml注释

html和xml注释一样 :<!-- 注释-->

元素 (标签)

什么是xml元素?

XML元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。

元素可以包含其他元素、文本,元素也可以拥有属性

例如:

<name>java入门</name>

这就是元素

xml命名规则:

  1. 名称可以包含字母、数字以及其他字符
<book sn="SN123123"> <!--book表示一个图书的信息 sn表示图书的编号-->
        <name>java入门</name>  <!--name表示书名-->
        <author>小二</author>   <!--作者-->
        <price>68.9</price>     <!--价格-->
</book>

2.名称不能以数字或者标点符号开始

错误示例:

<1book sn="SN123123"> <!--book表示一个图书的信息 sn表示图书的编号-->
        <name>c语言入门</name>  <!--name表示书名-->
        <author>小三</author>   <!--作者-->
        <price>16.8</price>     <!--价格-->
</1book>

3.名称不能包含空格

错误示例

<he llo></he llo>

xml属性

xml的属性标签和html的标签属性是非常类似的,属性可以提供元素的额外信息

在标签上可以书写属性:

一个标签上可以书写多个属性  每个属性必须使用引号引起来

规则和标签的书写一致 

例:

<book sn="SN123123" value="book" id="java"> <!--book表示一个图书的信息 sn表示图书的编号-->
</book>

语法规则

1.所有xml元素都必须有关闭标签(也就是闭合)

2.xml必须正确的嵌套

这就是不正确的嵌套

<book sn="SN123123" value="book" id="java"> <!--book表示一个图书的信息 sn表示图书的编号-->
    <author>小三
</book></author>

3.xml文档必须有根元素

根元素就是顶级元素 没有父标签的元素,叫顶级元素 。

根元素是没有父标签的顶级元素,而且是唯一一个才行

错误示例: 有两个books不可以

<?xml version="1.0" encoding="utf-8" ?>
<!--以上内容就是xml文件的声明
    version="1.0"   表示xml的版本
    encoding="utf-8" 表示xml文件本身的编码-->
<books>
    <book sn="SN123123"> <!--book表示一个图书的信息 sn表示图书的编号-->
        <name>java入门</name>  <!--name表示书名-->
        <author>小二</author>   <!--作者-->
        <price>68.9</price>     <!--价格-->
    </book>
</books>
<books>
        <book sn="SN123123" value="book" id="java"> <!--book表示一个图书的信息 sn表示图书的编号-->
            <name>c++语言入门</name>  <!--name表示书名-->
            <author>小四</author>   <!--作者-->
            <price>16.8</price>     <!--价格-->
        </book>
</books>

4.xml的属性值必须加引号

5.xml中的特殊字符需要转义使用

例:

  <price><16.8</price>  
 需写成
 <price>&lt;16.8</price>     < 转成 &lt;    > 转成 &gt;

文本区域(CDATA区)

CDATA语法可以告诉xml解析器,我CDATA中的文本内容只是纯文本,不需要xml语法解析

CDATA格式

<![CDATA[这里可以把你输入的字符原样显示,不会解析 xml]]>
<book sn="SN123123" value="book" id="java"> <!--book表示一个图书的信息 sn表示图书的编号-->
    <name>c语言入门</name>  <!--name表示书名-->
    <author>小三</author>   <!--作者-->
    <price>&lt;16.8</price>     <!--价格-->
    <![CDATA[<<<衬衫的价格是]]>
</book>

xml解析技术

不管是html还是xml都是标记性文档,都可以使用w3c组织制定的dom技术来解析。

xml文档对象模型定义访问和操作xml文档的标准方法。

Dom将xml文档作为一个树形结构,而树叶被定义为节点

document对象表示的是整个文档(可以是html文档也可以是xml文档)

早期JDK为我们提供两种解析xml技术DOM和Sax(已经过时)

dom解析是W3C组织制定的

SUN公司在JDK5对dom解析技术进行了升级:SAX(Simple API for XML)

SAX解析是一行一行读取不会产生大量的Dom对象 在内存和性能上优于Dom解析

第三方的解析:

jdom在dom基础上做了封装

    dom4j又对jdom做了封装

pull主要用在Android手机开发

dom4j解析技术

属于第三方公司技术,使用需要到dom4j官网下载jar包。

简单使用:

引入dom4j 依赖

<dependencies>
    <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>1.6.1</version>
    </dependency>
</dependencies>

项目下创建xml文件

   <?xml version="1.0" encoding="utf-8" ?>
    <!--以上内容就是xml文件的声明
        version="1.0"   表示xml的版本
        encoding="utf-8" 表示xml文件本身的编码-->
    <books>
        <book sn="SN123123"> <!--book表示一个图书的信息 sn表示图书的编号-->
            <name>java入门</name>  <!--name表示书名-->
            <author>小二</author>   <!--作者-->
            <price>68.9</price>     <!--价格-->
        </book>
        <book sn="SN123123" value="book" id="java"> <!--book表示一个图书的信息 sn表示图书的编号-->
            <name>c语言入门</name>  <!--name表示书名-->
            <author>小三</author>   <!--作者-->
            <price>&lt;16.8</price>     <!--价格-->
            <![CDATA[<<<衬衫的价格是]]>
        </book>
    </books>

创建一个pojo类

/**
 * @create: 2022/1/14
 * @author: Tony Stark
 */
public class Book {
    private String sn;
    private String name;
    private BigDecimal price;
    private String author;

    public Book() {
    }

    public Book(String sn, String name, BigDecimal 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 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 + '\'' +
                '}';
    }
}

测试方法

/**
     * 读取books.xml文件生成Book类
     */
    @Test
    public void test2(){
        Document read=null;
        Element rootElement=null;
        //1.读取books.xml文件
        SAXReader reader = new SAXReader();
        try {
            read = reader.read("books.xml");
        //2.通过Document对象获取根元素
            rootElement = read.getRootElement();
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        //3.通过根元素获取book标签对象
        //如果有多个就用elements  一个就用element
        List<Element> books = rootElement.elements("book");
        //4.遍历,处理每个book便签转换为book类
        for (Element book : books) {
            //asXML 把标签对象转换成标签字符串
//            System.out.println(book.asXML());
            Element name = book.element("name");
            Element price = book.element("price");
            Element author = book.element("author");
            //getText可以获取标签中的文本
            String nameText = name.getText();
            String priceText = price.getText();
            String authorText = author.getText();
            //获取标签的属性值
            String sn = book.attributeValue("sn");
            System.out.println(new Book(sn,nameText,new BigDecimal(priceText),authorText));
        }
    }

输出

Book{sn='SN123123', name='java入门', price=68.9, author='小二'}
Book{sn='SN123123', name='c语言入门', price=16.8, author='小三'}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值