Introduction to XML, including Jsoup class description

XML

1. 基本概念
2. 语法
3. 如何解析

* 基本概念:extension Markup Language 可扩展标记性语言
	     1. 可扩展:标签都是自定义的。
	     2. 功能:
		     * 存储数据
			     1. 配置文件
			     2. 在网络中传输
	     3. xml与html的区别 
		     1. xml标签都是自定义的,html标签是预定义的。
		     2. xml语法严格,html语法松散
		     3. xml是存储数据的,html是展示数据的
*语法:
	* 基本语法:
		1. xml文档的后缀名 .xml
		2. xml第一行必须是文档申明
		3. xml文档中有且仅有一个根标签(严格满足树的结构,只有一棵树)
		4. 属性值必须用引号(单双都可以),引起来
		5. 标签必须正确关闭
		6. xml标签区分大小写
	* 快速入门:
		* <?xml version="1.0"  ?>
				
				  

				<users>

				  
				  

				<users>

				<name>zhangsan</name>

				<age>23</age>

				<gender>male</gender>

				</users>

				  

				<users>

				<name>zhangsan</name>

				<age>23</age>

				<gender>male</gender>

				</users>

				  
				  

				</users>
	* 组成部分:
		1. 文档申明
			* 格式:
				* <?xml 属性列表 ?>
				* 属性列表:
					* version:版本号,必须的属性
					* encoding:编码方式,告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1
					* standalone:是否独立--->是否依赖于其他文件
		2. 指令:(了解):用于展示数据的(现在已经不用了)
		3. 标签:标签名自定义的
				* 数字和标点符号不能用来开头
				* 不能以字母xml及其大小写来开头
				* 名称不能包含空格
		4. 属性
			    * id值唯一
		5. 文本
				* 特殊符号必须使用相关的符号,来代替表示
					* 比如,<使用&it来代替
				* CDATA区:该区域的数据会被原样展示
					* 格式: <![CDATA[ 需要写入的文本信息 ]]>
					
*约束(约束文档,第一步,必须看懂文档中的标签层次; 第二步,就是对具体数据的约束范围)
	1. 谁编写xml? --> 用户,软件使用者(程序员)——————>在xml的约束文件下编写xml。
	2. 谁解析xml? ---> 软件(半成品,框架)
	3. 约束:规定xml文档的书写规则(就是规定了xml需要怎么写去匹配他的程序)
		  *  作为框架的使用者(程序员):
				  1. 能够在xml中引入约束文档
				  2. 能够简单的读懂约束文档
	* 分类:
		1. DTD:一种简单的约束技术(缺陷对数据的输入内容不能约束,后缀名" .dtd")
		2. Schema:一种复杂的约束技术(后缀名" .xsd")  
	* DTD:
		* 引入dtd文档到xml中
			* 内部dtd:将约束规则定义在内部的xml中
			* 外部dtd:将约束的规则定义在外部的dtd文件中
				* 本地:<!DOCTYPE 根标签名 SYSTEM "dtd文件的名字"> (约束文件引入xml中)
				* 网络:<!DOCTYPE 根标签名 SYSTEM "dtd文件名字" "dtd文件的位置URL"> (将网络端的约束文件引入xml中)
	* Schema:
		* 引入文档的要求:
				1. 引入xml根标签
				2. 引入xsi前缀 (这个相当于using namespae std,系统默认前缀)xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
				3. 引入xsd文件命名空间. xsi:schemalocation="http://www.itcast.cn/xml student.xsd"    其中http://www.itcast.cn/xml只是一个前缀来命名空间,类似于c++中的空间的概念(这里在初始化空间,创建空间)
					* 条件3格式:xsi:schemalocation="空间的名字 地址信息(相对地址或绝对地址)"
				4. 为每一个xsd约束申明一个前缀,作为标识  如 xmlns="http://www.itcast.cn/xml" ; 如果在使用过程中没有条件4这步,就必须在所有相关标签前加上http://www.itcast.cn/xml这个前缀,就如同c++中没有使用using namespae ***时一样。 
						* 条件4的使用格式:xmlns:替代值(这个可以不写,不写时默认为空)="http://www.itcast.cn/xml",(其中和namespace相同,xmlns全称就是xml namespace)
				* 空间的名称的引入的意义是在当同时引入多个schema文档时用作区分用的 

* 解析:操作xml文档,文档中的数据读取到内存中
	* 操作xml文档
		1. 解析(读取):将文档中的数据读取到内存中
		2. 写入:将内存中的数据保存到xml中。持久性存储
	* 解析xml的方式:
		1. DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树。
				* 有点:操作方便。可以对文档进行CRUD操作
				* 缺点:占内存   
		2. SAX:逐行读取,基于事件驱动。 (常用于移动端)
				* 优点:不占内存
				* 缺点:只能读取,不能CRUD
		
	* xml常见解析器:
		1. JAXP:sun公司提供的解析器,支持dom和sax两种思想
		2. DOM4J:一款非常优秀的解析器
		3. jsoup:jsoup是一款java的HTML解析器,可以直接解析某个URL地址,HTML文本内容。它提供了一套非常省力的API,可以直接通过DOM,CSS以及类似于JQuery的操作方法来取出和操作数据。
		4. PULL:Android操作系统内置的解析器,sax方式。
	* Jsoup解析器
		* 快速入门:
			* 步骤:
				* 导入相关jar包
				* 获取Document对象
				* 获取对应的标签Element对象
				* 获取数据
				* 代码
					//1.获取Document对象,根据xml文档获取  
					//1.获取student.xml的path  
						String path = JsoupDemo1.class.getClassLoader().getResource("xml/dtd/jsoup/student.xml").getPath();  
						//2.2 解析xml文档,加载文档进内存,获取dom树---->Document  
						Document document = null;  
						try {  
						    document = Jsoup.parse(new File(path), "utf-8");  
						} catch (IOException e) {  
						    e.printStackTrace();  
						}  
						//3获取元素对象 ElementsElements elements = document.getElementsByTag("name");  
						System.out.println(elements.size());  
						//3.1获取第一个name标签的Element对象  
						Element nameElement = elements.get(0);  
						//3.2获取数据  
						String name = nameElement.text();  
						System.out.println(name);
		*对象的使用:	
				1. Jsoup:工具类,可以解析html和xml文档,返回Document
					* 方法:parse
						* 重载1:parse(File in, String charsetName):解析xml或html
						* 重载2:parse(String html):解析xml或html字符串(就是必须传入xml或html内容作为字符串传入)
						* 重载3:parse(URL url,int timeoutMills)通过网络路径进行指定的html或xml的文档对象。 timeoutMills指定查询超过这个时间就报错。
							* URL代表网络中的一个资源
						*  重载4:parse(File file,String charsetName) File代表的是一个配置文件,初始化是传入配置文件地址;charsetName是其编码方式。
				2. Document:文档对象。代表内存中的dom树
					* 主要是用来获取Element对象
						* getElementsByTag(String tagName):根据标签名称获取元素集合(通过标签名来获取属性名称)
						* getElementsByAttribute(String key):根据属性名称获取元素对象集合(通过属性名来获取Elements对象)
						* getElementsByAttributeValue():根据对应的属性名和属性值来获取元素对象集合。(通过属性值和属性,来获取Elements对象)
						* getElementsById(String id):根据id来获取元素集合(这个的属性的名称必须是id,通过属性id的属性值的不同来获得唯一的Element对象)--》这个返回的是Element对象
				3. Elements:元素Element对象的集合。可以当做ArryList<Element>来使用,(就是得到一个Element对象集合,就是Elements)
				4. Element:元素对象。(由于Document继承自Element所以,Document的四个方法,Element对象也可以使用)(在强化一个概念:此元素下,子元素的获取办法)
					* 获取子元素对象:(到时候有可能我们获得的Element不一定就是最小的结构,因此我们需要再进行操作对其在细分)
						 *  getElementsByTag(String tagName):根据标签名称获取元素集合(通过标签名来获取属性名称) 
						 *  getElementsByAttribute(String key):根据属性名称获取元素对象集合(通过属性名来获取Elements对象)
						 *  getElementsByAttributeValue():根据对应的属性名和属性值来获取元素对象集合。(通过属性值和属性,来获取Elements对象) 
						 *  getElementsById(String id):根据id来获取元素集合(这个的属性的名称必须是id,通过属性id的属性值的不同来获得唯一的Element对象)--》这个返回的是Element对象
						 * 获取属性值
							 * String attr(String key):根据属性名称获取属性值(获取指定属性的属性值)
						 * 获取文本内容
							 * String text(): 获取文本内容。(此标签下的子标签,不会被输出,但子标签的文本内容会被输出)
							 * String html():获取标签体的所有内容(包括字标签的字符串内容:此标签下的子标签,所有内容会被输出,包括文本和子标签本身)
				5. Node:对象。
					* Document和Element的父类
		* 快捷查询方式
			1. selector:选择器(Document下)
				* 使用的方法:Elements select(String cssQuery)
					* 参数:直接输入默认是用标签名
						* 以#开始字符串,是以属性值为查询条件
						* 这个字符串输入相关语法,就会执行相关的查询动作
					* 语法:
			2. XPath:
				* XPath即为xml路径语言,它是一种用来确定xml(标准通用标记语言的子集)文档中某部分位置的语言(就是用来查找的一种语法)
					* 使用Jsoup的XPath需要额外导入jar包
					* 创建Document对象
					* 将Document对象作为参数传入构造器,创建JXDocument对象	
					* 在根据其方法,结合其语法进行查询。(其语法类似于目录查询的方式进行的)
						* 其中List<JXNode>代替了Elements的地位
						* JXNode代替了Element

Guess you like

Origin blog.csdn.net/qq_45788043/article/details/111600135