XML

一、概念

可扩展的标记语言

1、功能

存储数据:可以用作配置文件、在网络中传输

2、xml与html的区别

  1. xml标签都是自定义的,html标签都是预定义的
  2. xml的语法严格,html语法松散
  3. xml是存储数据的,html是展示数据的

二、语法

1、基本语法

  1. xml文档的后缀名必须为.xml
  2. xml第一行必须定义为文档声明
  3. xml文档中有且仅有一个根标签
  4. 属性值必须使用引号(单引号双引号都行)引起来
  5. 标签必须正确关闭
  6. xml标签区分大小写

2、组成部分

(1)文档声明

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

② 属性列表

  • version:版本号,该属性为必须属性
  • encoding:编码方式。告知解析引擎当前文件使用的字符集
  • standalone:是否独立
    取值为:yes或者no,如果为yes则不依赖其他文件,如果为no则依赖其他文件

(2)指令:结合css控制xml标签的样式

<?xml-stylesheet type="text/css" href="你的css的路径" ?>

(3)标签:

命名规则

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

可使用任何名称,没有保留的字词。

(4)属性

id属性值唯一,表示元素的唯一表示,但是这个id并不一定是id=什么什么

(5)文本

特殊字符需要用转义符进行转义

CDATA区:在该区域内的数据会被原封不动的展示出来
格式如下:
<![CDATA[ 想要展示的数据 ]]>

3、约束

规定xml文档的书写规则
我们只要能够在xml引入约束文档、能够简单的读懂约束文档就行

约束文档的分类

(1)DTD:一种简单的约束技术
① 外部引入dtd方式:
将约束的规则定义在外部的dtd文件中
分为本地外部约束和网络外部约束
本地外部约束:<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
网络外部约束:<!DOCTYPE 根标签名 PUBLIC "dtd文件的名字" "dtd文件的URL位置">
② 内部dtd的引入方式
将dtd文件定义在xml文档中

*dtd文档约束的缺陷

无法设置标签内容中的数据的正确合理性,内容可以随意填写

(2)Schema:一种复杂的约束技术
引入:

  • 填写xml文档的根元素
  • 引入xsi前缀 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"这是一个固定的格式,取值有很多,但是这里我们使用2001的,这里我们引入了之后,就可以通过xsi引入地址
  • 引入xsd文件命名空间xsi:schemaLocation="命名空间 你的schemea文件的路径":双引号当中的命名空间是随意起的,是给后面的schemea文件的路径起的名字
  • 为每一个xsd约束声明一个前缀,作为表示 xmlns:前缀名="命名空间"
    如果前缀名不写的话,那么默认表示空前缀,什么都不用写

注意这里的命名空间起的名字,后面的所有标签都需要加上这个前缀,如果单独声明了命名空间的前缀,那么只需要在每个标签前加上声明的前缀即可

三、解析

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

1、操作xml文档

  1. 解析(读取):将文档中的数据读取到内存中
  2. 写入:将内存中的数据保存到xml文档中。持久化的存储

2、解析xml的方式

(1)DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树

  • 优点:操作方便,可以对文档进行增删改查的操作
  • 缺点:因为是一次性加载进内存,所以当xml文档很大的时候加载进来十分的占用内存

(2)SAX:逐行读取,基于事件驱动

  • 优点:不占内存
  • 缺点:只能读取,不能增删改

3、xml常见的解析器

  • JAXP:sun公司提供的解析器,支持dom和sax两种思想
  • DOM4J:一款非常优秀的解析器
  • Jsoup:jsoup是一款Java的HTML解析器,可以直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可以通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据
  • PULL:Android操作系统内置的解析器,是一种sax方式的解析器

四、Jsoup使用

1、使用步骤

  • (1)导入jar包
  • (2)获取Document对象
  • (3)获取对应的标签Element对象
  • (4)获取数据

举例示范

xml文件内容
在这里插入图片描述
jsoup使用步骤示范
在这里插入图片描述

2、Jsoup中对象的介绍

(1)Jsoup:工具类,可以解析hetml或者xml文档,返回Document

parse:解析xml或者html文件的方法,返回Document,他有很多的重构方法

  • parse(File in,String charsetName):解析xml或者html文件的
  • parse(String html):解析xml或者html字符串
  • parse(URL url,int timeoutMillis):通过url路径获取指定的html或者xml文档对象,第二个参数代表设置超时时间,超过这个时间没有访问到,就停止访问,该方法多用于-网络爬虫的使用

(2)Document:文档对象,代表内存当中的dom树

  • getElementById(String id):根据id属性值获取唯一的element对象
  • getElementsByTag(String tagName):根据标签名称获取元素对象集合
  • getElementsByAttribute(String key):根据属性名称获取元素对象集合
  • getElementsByAttributeValue(String key,String Value):根据对应的属性名和属性值获取元素对象集合

举例说明
xml文件内容
在这里插入图片描述

① 获取属性名为id的元素对象们
在这里插入图片描述
控制台输出的结果为:
在这里插入图片描述

②获取number属性值为heima_0001的元素对象
在这里插入图片描述
控制台输出的结果为
在这里插入图片描述
③ 获取id属性值的元素对象在这里插入图片描述

控制台输出的结果为:
在这里插入图片描述

(3)Elements:元素Element独享的集合。我们可以把它当作ArrayList<Element>来使用

(4)Element:元素对象

获取子元素对象

  • getElementById(String id):根据id属性值获取唯一的element对象
  • getElementsByTag(String tagName):根据标签名称获取元素对象集合
  • getElementsByAttribute(String key):根据属性名称获取元素对象集合
  • getElementsByAttributeValue(String key,String Value):根据对应的属性名和属性值获取元素对象集合

获取属性值

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

获取文本内容

  • String text():获取文本内容
  • String html():获取标签体内的所有内容,包括字体子标签中的字符串和标签本身

举例说明:
xml文档中的内容如下
在这里插入图片描述
①通过Document对象获取name标签,能获取到所有name标签,如果通过name的父类的document对象来获取name标签的话,只能获取到该父类的子类标签
在这里插入图片描述
可以看出通过docemnt获取到了两个name,而通过父类只获取到了他的子类的那一个name
在这里插入图片描述
②获取student对象的属性值
在这里插入图片描述
得到的结果为
在这里插入图片描述
③获取文本内容
在这里插入图片描述
得到的结果为
在这里插入图片描述
如果将xml文档中的内容改成,如下
在这里插入图片描述
那么再次执行该代码,获取的内容就是这样
在这里插入图片描述
由此可以看出通过html()获取和text()获取的区别

(5)Node:节点对象

是Document和Element的父类

3、快捷查询的方式

(1)selector:选择器查询

使用方法:Element select(String cssQuery)
语法:参考Selector类中定义的语法

举例说明:

xml文档中的内容如下
在这里插入图片描述

① 快捷查询name标签
在这里插入图片描述
② 快捷查询id为itcast的元素
在这里插入图片描述
③ 获取student标签并且number属性值为heima_0001的标签
在这里插入图片描述
④获取student标签并且number属性值为heima_0001的age的子标签
在这里插入图片描述

(2)XPath:

XPath即为XML路径语言,他是一种用来确定xml(标准通用标记语言的子集)文档中某部分位置的语言

注意:

  • 使用Jsoup的Xpath需要额外带入jar包
  • 查询w3school参考手册,使用xpath的语法完成查询
  • 我们需要通过构造方法new JXDocument(document对象)来创建JXDocument对象

举例说明
xml文档内容如下
在这里插入图片描述
① 结合xpath语法查询所有student标签
在这里插入图片描述
在这里插入图片描述
② 查询所有student标签下的name标签
在这里插入图片描述
在这里插入图片描述
④ 查询student标签下带有id属性的name标签
在这里插入图片描述
在这里插入图片描述
⑤ 查询student标签下带有id属性的name标签,并且id属性值为itcast
在这里插入图片描述
在这里插入图片描述

posted @ 2020-12-04 18:06  谢海川  阅读(141)  评论(0)    收藏  举报