XML

简介

  1. 概念:Extensible Markup Language(可扩展标记语言)
    • 可扩展:标签都是自定义的
  2. 功能:存储数据
    1. 配置文件
    2. 在网络中传输
  3. xml和html的区别
    1. xml标签都是自定义的,html标签是预定义
    2. xml语法严格,html语法松散
    3. xml是存储数据的,html是展示数据的

基本语法

  1. xml文档后缀名是**.xml**
  2. 第一行必须是文档说明
    1
    <?xml version ?>
  3. xmlw文档中有且仅有一个根标签
  4. 属性值必须使用引号(单双都行)引起来
  5. 标签必须正确关闭
  6. xml标签名称区分大小写
1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version='1.0' ?>
<test>
<user id='1'>
<name>张三</name>
<age>20</age>
</user>

<user id='2'>
<name>李四</name>
<age>22</age>
</user>

</test>

组成部分

文档声明

  • 格式

    1
    <?xml 属性列表 ?>
  • 属性列表:

    1. version:版本号,必须写
    2. encoding:编码方式,告知解析引擎当前文档使用的字符集,默认是ISO-8859-1
    3. standalone:是否独立(yes或no),依赖或者不依赖其他文件

指令

  • 结合css控制标签样式
    1
    <? xml-stylesheet type="text/css" href="css文件路径" ?>

标签

  • 标签名称自定义

属性

  • id属性值唯一

文本

  • CDATA区:该区域的数据会被原样展示
1
2
3
<![CDATA[
原样展示的数据放这里
]]>

约束

  • 概念:规定xml文档的书写规则
  • 分类:
    1. DTD:一种简单的约束技术(文件后缀名是dtd)
    2. Schema:一种复杂的约束技术(文件后缀名是xsd)

DTD

  1. 引入dtd文档到xml文档中
    • 内部dtd:将约束规则定义在xml文档中
    • 外部dtd:将约束规则定义在外部的dtd文件中
      • 本地:<!DOCTYPE 根标签名 SYSTEM “dtd文件的位置”>
      • 网络:<!DOCTYPE 根标签名 PUBLIC “dtd文件名字” “dtd文件的位置(URL位置)“>

Schema

1
2
3
4
5
6
<students   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.itcast.cn/xml student.xsd"
xmlns="http://www.itcast.cn/xml"
xmlns:a="http://www.itcast.cn/xml" >
上面这种起前缀名称 引入多文件时使用
这样起前缀后 每一个标签前面都得加上 ":前缀名"

解析

  • 概念:操作xml文档,将文档中的数据读取到内存中

解析xml方式

  1. DOM:将标记语言文档一次性加载进内存,在内存中形成一个DOM树
    • 优点:操作方便,可以对文档进行CRUD的所有操作
    • 缺点:消耗内存
  2. SAX逐行读取,基于事件驱动
    • 优点:不消耗内存
    • 缺点:只能读取,不能增删改

xml解析器

  1. JAXP:sun公司提供的解析器,支持dom和sax两种思想
  2. OM4J:一款非常优秀的解析器
  3. Jsoup:解析HTML的解析器,同时支持解析xml
  4. PULL:安卓操作系统内置解析器,sax方式

Jsoup

概念:jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本

使用

  1. 导入jar包下载Jsoup
  2. 获取Document对象
  3. 获取对应的标签Element对象
  4. 获取数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 获取Document对象
// 1.根据xml文档获取
// 1.1 获取student.xml的path
String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
// 1.2解析xml文档,加载文档进内存,获取dom树
Document document = Jsoup.parse(new File(path), "utf-8");
// 获取元素对象 Element
Elements elementsByTag = document.getElementsByTag("name");
System.out.println(elementsByTag.size());
//拿到第一个name的Element对象
Element element = elementsByTag.get(0);
// 获取数据
String name = element.text();
System.out.println(name); // tom

对象的使用

  1. Jsoup:工具类,可以解析html或xml文档,返回Document
    • parse:解析html或xml文档,返回Document
      • **parse(File in, String charsetName)**:解析xml或html文件的。
      • **parse(String html)**:解析xml或html字符串
      • **parse(URL url, int timeoutMillis)**:通过网络路径获取指定的html或xml的文档对象
  2. Document:文档对象。代表内存中的dom树
    • 获取Element对象
      • **getElementById​(String id)**:根据id属性值获取唯一的element对象
      • **getElementsByTag​(String tagName)**:根据标签名称获取元素对象集合
      • **getElementsByAttribute​(String key)**:根据属性名称获取元素对象集合
      • **getElementsByAttributeValue​(String key, String value)**:根据对应的属性名和属性值获取元素对象集合
  3. Elements:元素Element对象的集合。可以当做 ArrayList来使用
  4. Element:元素对象
    1. 获取子元素对象
      • **getElementById​(String id)**:根据id属性值获取唯一的element对象
      • **getElementsByTag​(String tagName)**:根据标签名称获取元素对象集合
      • **getElementsByAttribute​(String key)**:根据属性名称获取元素对象集合
      • **getElementsByAttributeValue\​(String key, String value)**:根据对应的属性名和属性值获取元素对象集合
    2. 获取属性值
      • **String attr(String key)**:根据属性名称获取属性值
    3. 获取文本内容
      • String text():获取文本内容
      • String html():获取标签体的所有内容(包括字标签的字符串内容)
  5. Node:节点对象
    • 是Document和Element的父类

相关文章

YML

接口+Webhooks实现自动部署

PicGo配置Gitee图床

Chrome DevTools远程调试安卓页面