配置文件——XML

1.XML概念

XML:Extensible Markup Language,可扩展标记语言
可扩展:标签都是自定义的,想写啥写啥,只要符合标签的命名

2.XML功能——存储数据

  • XML作为配置文件
  • 数据存起来后可以在网络中传输(XML是纯文本的,它和语言和平台都无关)

3.XML和HTML区别

扩展——W3C:万维网联盟,94年创建,发布了许多影响深远的web技术标准及实施指南,其中就 包含XML和HTML

XML和HTML区别

  • XML标签都是自定义的,HTML标签都是预定义的
  • XML语法严格,HTML语法松散
  • XML是存储数据的,HTML是展示数据的

4.XML语法

4.1.简单XML代码

在桌面创建一个文件,XML文件的后缀是“.xml”,可以用Notepad打开后写入一段入门的XML代码:

<?xml version = '1.0'?>

<users>

	<user id = "1">
		<name>zhangsan</name>
		<age>23</age>
		<gender>male</gender>
	</user>
	
	<user id = "2">
		<name>lisi</name>
		<age>22</age>
		<gender>female</gender>
	</user>
	
</users>

如何验证自己写的XML代码对不对呢?XML文档可以被所有浏览器解析,所以浏览器中有对应的XML解析引擎,只要将XML文件放进来不报错,那么就说明XML代码没问题,如下:
在这里插入图片描述

4.2.基本语法

  • XML文档的后缀名“.xml”
  • 文档第一行(前面不能有空行或空格)必须有文档声明
  • XML文档中有且只有一个根标签
  • 属性值必须用引号引起来,单双引号都可以`
  • 必须正确闭合,要么自闭和,如
    ,要么有开始标签有结束标签互相匹配
  • XML标签区分大小写

4.3.组成部分

4.3.1.文档声明

4.3.1.1.格式

<?xml 属性列表?>:注意,问号和xml之间没有空格

4.3.1.2.属性列表

  • version:版本号,写1.0,不写version会报错
  • encoding:编码方式,告知解析引擎,当前文档使用的字符集,默认ISO-8859-1
  • standalone:是否独立,有yes(不依赖其他文件)和no(依赖其他文件)两个值,在实际中很少专门去设置

4.3.2.指令

结合css使用

4.3.3.标签

标签名称自定义,自定义规则如下:

  • 名称可以包含字符、数字以及其他的字符
  • 名称不能以数字或标点符号开始
  • 名称不能以xml(或XML、Xml等)开始
  • 名称不能包含空格

4.3.4.属性

id属性值唯一

4.3.5.文本

特殊字符要转义,比如大于号小于号等,为了更方便,我们有一个CDATA区,格式如下:

<![CDATA[
	要展示的数据
]]>

示例如下:

<code>
    <!--编写代码:if(a < b && a > c){}-->

    <!--转义-->
    if(a &lt; b &amp;&amp; a &gt; c){}

    <!--CDATA块-->
    <![CDATA[
        if(a < b && a > c){}
    ]]>
</code>

4.3.6.注释

<!--注释内容-->

5.XML约束

5.1.约束文档基本概念

谁编写XML?——用户,软件使用者
谁解析XML:——软件
在这里插入图片描述
作为我们,需要:

  • 能够在xml中引入约束文件
  • 能够简单地读懂(许多开发环境能够自动地根据约束文档提供相应提示,我们只需要简单读懂即可)约束文档

5.2.约束文档的技术实现

市面上的约束文档主要分两类:

  • DTD:简单的约束技术
  • Schema:比较复杂的约束技术

5.2.1.DTD约束

一个简单的DTD约束文档:
在这里插入图片描述

5.2.1.1.DTD的引入

内部的DTD(不常用)

将约束的规则定义在xml文档中
在这里插入图片描述

外部的DTD

将约束的规则定义在外部的DTD文件中,外部DTD分两种:

  • 本地:
  • 网络:

5.2.1.2.DTD的缺点

约束性不够强

5.2.2.Schema约束

一个简单的Schema约束文档:
在这里插入图片描述
每个自定义类型都进行了更详细的定义

5.2.2.1.引入Schema约束

  • 填写XML文档的根元素
  • 引入xsi前缀
  • 引入xsd文件命名空间
  • 为每一个xsd约束声明一个前缀作为标识

6.XML解析

解析:操作xml文档,将文档中的数据读取到内存中

操作XML文档:

  • 解析(读取):将文档中的数据读到内存中
  • 写入:将内存中的数据保存到XML文档中,持久化的存储

6.1.解析XML的方式:

6.1.1.DOM

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

  • 操作方便,可以对文档进行CRUD的所有操作

DOM缺点

  • 一次性加载所有东西进内存,当文件特别大时,生成的树形结构非常占内存

6.1.2.SAX

SAX:逐行读取,基于事件驱动的
SAX优点:内存中永远只有一行,不占内存,适用于内存较小的设备
SAX缺点:只能读取,不能增删改

6.2.XML常见的解析器

6.2.1.JAXP(使用少)

由Sun公司提供,支持DOM和SAX两种思想

6.2.2.DOM4J(优秀)

基于DOM的优秀解析器

6.2.3.jsoup

一款Java的HTML解析器,可以直接解析某个URL地址、HTML文本内容,它提供了一套非常省力的API,可通过DOM、CSS以及类似于jQuery的操作方法来读取操作数据

6.2.3.1.jsoup快速入门

步骤:

  • 导入jar包
    在这里插入图片描述
  • 获取Document对象,代表整个DOM树形结构

获取方法:

  • 从一个URL、文件或字符串中解析
  • 使用DOM或CSS选择器来查找、取出数据
  • 可操作元素、属性、文本
  • 获取对应的标签:Element对象
  • 获取数据
    在这里插入图片描述

6.2.3.2.jsoup对象的使用

  • Jsoup:工具类,解析HTML或XML文档,返回Document,主要了解parse方法

parse:解析解析HTML或XML文档,返回Document

  • parse(File in, String charsetName):解析XML或HTML文件的
  • parse(String html):解析XML或HTML字符串
  • parse(URL url, int timeoutMillis):通过网络路径获取指定的html或xml的对象,比较常见,做爬虫时会用到
  • Document:继承自Element,是文档对象,代表内存中的DOM树

主要用于获取Element对象:

  • getElementById(String tagName):根据ID属性值获取唯一的Element对象(用的不多)
  • getElementByTag(String tagName):根据标签名称获取元素对象集合
  • getElementByAttribute(String key):根据属性名称获取元素对象集合
  • getElementByAttributeValue(String key, String value):根据对应的属性名和属性值来获取元素对象集合
    在这里插入图片描述
  • Elements:元素的Element对象的集合,可以当做 ArrayList<Element>来使用
  • Element:元素对象,可以获取元素对象、属性值、文本内容等

1.获取子元素对象:

  • getElementById(String tagName):根据ID属性值获取唯一的Element对象(用的不多)
  • getElementByTag(String tagName):根据标签名称获取元素对象集合
  • getElementByAttribute(String key):根据属性名称获取元素对象集合
  • getElementByAttributeValue(String key, String value):根据对应的属性名和属性值来获取元素对象集合

2.获取属性值

  • String attr(String key):根据属性名称获取属性值

3.获取文本内容

  • String text():获取纯文本内容
  • String html():获取标签体的所有内容(包括子标签标签体的字符串内容)
    在这里插入图片描述
  • Node:节点对象,是Document和Element对象的父类

6.2.3.3.jsoup提供的快捷查询方式

  • selector:选择器,熟知语法的话查询层次较深的内容比较方便

1.使用的方法:Elements select(String cssQuery)
2.语法:参考Selector类中定义的语法
在这里插入图片描述
3.一个比较复杂的例子:
在这里插入图片描述

  • XPath:XPath即XML路径语言,它是一种用来确定XML文档中某部分位置的语言

使用jsoup的XPath要额外导入一个Jar包,因为XPath虽用于XML查询,但是它本身和XML是相互独立的
查询W3CSchool参考手册使用XPath的语法完成查询
在这里插入图片描述
在这里插入图片描述

6.2.4.PULL

基于Android操作系统的解析器,SAX方式

猜你喜欢

转载自blog.csdn.net/LiLiLiLaLa/article/details/90219528