Xml学习笔记

20 篇文章 0 订阅
本文详细介绍了XML的基本概念,包括XML的定义、作用、格式及与HTML的区别。接着探讨了XML语法,涵盖文档声明、元素、属性、注释等内容,并提到了约束技术如DTD和Schema。此外,还讲解了XML解析的DOM和SAX两种主要方法及其优缺点,以及第三方解析库的应用。通过案例展示了如何在实践中操作和解析XML文件。
摘要由CSDN通过智能技术生成

一、xml简介

1.1什么是xml?

可扩展的标记性语言(Extensible Markup Language)

是一种标记语音

xml是一种非常灵活的语音,没有固定的标签,所有的标签都可以自己定义

1.2xml的作用?

通常被用于信息的记录和传递,因此xml经常被充当配置文件

1.3xml的格式

<?xml version='1.0' encoding='gbk' ?>
<users>
    <user id="1">
        <name>张三</name>
        <age>23</age>
    </user>
    <user id="2">
        <name>李四</name>
        <age>24</age>
    </user>
</users>

注意: xml文档的后缀名.xml

​ xml第一行必须定义为文档声明

​ xml文档中有且只要一个根标签

​ 属性值必须使用引号

​ 标签必须正确关闭

​ xml标签名称区分大小写

1.4与HTML的区别?

  • xml是自定义的标签,html标签是固定的
  • xml语法严格,html语法松散
  • xml是存储数据的,html是展示数据的

二、xml语法

2.1文档声明

格式:<?xml 属性列表 ?>

属性列表:

version版本号

encoding编码方式,校验文本实际编码是否与告知编码相符合

standalone是否独立:yes不依赖于其他文件,no依赖

2.2指令(了解)

引入css样式

<?xml-stylesheet type="text/css" href="a.css"?>
user{
    color: red;
}

2.3xml注释

<!--内容  -->

2.4元素(标签)

自定义标签名称规则:

  1. 名称可以包含字母、数字以及其他的字符
  2. 名称不能以数字或者标点符号开头
  3. 名称不能以字母xml(或者XML、Xml)开头
  4. 名称不能包含空格

2.5xml属性

  • 以键值对的形式存在
  • 用引号引起来
  • id属性值必须唯一

2.6文本

**CDATA区:**在该区域中的数据会被原样展示

<![CDATA[
if (a<b && a>c){}
]]>

三、约束

谁编写xml?-----------用户,软件的使用者

谁解析xml?-----------软件
在这里插入图片描述

作为框架的使用者:

  • 能够在xml引入约束文档
  • 能够简单的读懂约束文档

3.1分类

DTD:一种简单的约束技术

Schema:一种复杂的约束技术

DTD:

引入dtd文档到xml文档中:

​ 1.内部dtd:将约束规则定义在xml文档中

​ 2.外部dtd:将约束规则定义在外部的dtd文件中

​ 本地:

​ 网络:

<!ELEMENT students (student*) >
<!ELEMENT student (name,age,sex) >
<!ELEMENT name (#PCDATA) >
<!ELEMENT age (#PCDATA) >
<!ELEMENT sex (#PCDATA) >
<!ATTLIST student number ID #REQUIRED>

xml

<?xml version='1.0' encoding='gbk' ?>
<!DOCTYPE students SYSTEM "Student.dtd">

<students>
    <student number="s001">
        <name>张三</name>
        <age>18</age>
        <sex></sex>
    </student>

    <student number="s002">
        <name>李四</name>
        <age>20</age>
        <sex></sex>
    </student>
</students>
Schema:

字符串的内容不能被DTD所约束,导致内容可以随意编写,会出现错误

四、xml解析

4.1常见的xml操作

1.解析:将xml文档中的数据读取到内存中

2.持久化:将内存中的数据 保存xml文档中 (不常用)

4.2解析xml的方式

1.DOM:

将标记语言文档一次性加载进内存中,在内存中形成一颗DOM树
在这里插入图片描述

优点:操作简单可以对文档进行CRUD操作

缺点:占内存,不适用移动和嵌入式设备

2.SAX:

逐行读取基于事情驱动的解析方式

3.第三方解析

jdom:在dom基础上进行了封装

dom4j:在jdom的基础上进行了封装

pull:主要用在Android手机开发,它与SAX解析方式类似,都是事件驱动方式解析xml文件

4.案例
book.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book bid="BID123456">
    <name>Java葵花宝典</name>
    <price>20.59</price>
    <author>詹姆斯高斯林</author>

</book>

<book bid="BID123444">
    <name>Java入门宝典</name>
    <price>29.90</price>
    <author>比尔盖茨</author>
</book>

</books>
book类
package dom4j;

public class Book {
    private String bid;
    private String name;
    private String price;
    private String author;

    public Book() {
    }

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

    public String getBid() {
        return bid;
    }

    public void setBid(String bid) {
        this.bid = bid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPrice() {
        return price;
    }

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

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    @Override
    public String toString() {
        return "Book{" +
                "bid='" + bid + '\'' +
                ", name='" + name + '\'' +
                ", price='" + price + '\'' +
                ", author='" + author + '\'' +
                '}';
    }
}
测试
import org.dom4j.io.SAXReader;

import java.util.List;

public class test {
    public static void main(String[] args) throws Exception {
        //将xml文件包装成Document对象
            SAXReader saxReader = new SAXReader();
            Document document = saxReader.read("book.xml");
        //通过Document对象获取根元素
        Element rootElement = document.getRootElement();
        //获取根元素的子元素集合
        List<Element> books = rootElement.elements("book");
        //遍历,处理每一个便签,并将数据包装成book类对象
        for (Element book:books) {
            Element nameElement = book.element("name");
            String name = nameElement.getText();
            System.out.println(name);//名字
            String price = book.element("price").getText();
            System.out.println(price);//价格
            String author = book.element("author").getText();
            System.out.println(author);//作者
            String bid = book.attributeValue("bid");
            System.out.println(bid);
            System.out.println(new Book(bid,name,price,author));
        }
    }
}
         System.out.println(price);//价格
            String author = book.element("author").getText();
            System.out.println(author);//作者
            String bid = book.attributeValue("bid");
            System.out.println(bid);
            System.out.println(new Book(bid,name,price,author));
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值