【XML】XML知识点汇总——标签化的键值对信息

基础知识

 
概念

Extensible Markup Language,可扩展标记语言

说明:可扩展的意思是,标签都是自定义的

功能:存储数据配置文件,在网络中传输

xml与html的区别

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

 

基本语法

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

 

组成部分

❶ 文档声明:格式:<?xml 属性列表 ?>
          version版本号。必须的属性
          encoding(编码方式。告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1)
          standalone(是否独立。yes表示不依赖其他文件,no表示依赖其他文件)

❷ 指令: <?xml-stylesheet type="text/css" href="loli.css" ?>
          和html一样,用来引入外部样式表——但因为这不是xml的工作,因而基本废弃

❸ 标签:标签名称是自定义的
          不要太离谱就行!数字开头、包含空格这种低级错误不要犯。

❹ 属性:就是键值对;注意id属性值唯一

❺ 文本:补充一个CDATA区——在该区域中的数据会被原样展示。语法: <![CDATA[萝莉赛高]]>

 
 
 
 

约束

约束:规定xml文档的书写规则

作为框架的使用者:我们只需要做到:1.能够在xml中引入约束文档  2. 能够简单的读懂约束文档

两种约束技术:DTD(简单); Schema(复杂)

------------------------------------------------ DTD ----------------------------------------------------

引入dtd文档到xml文档中:
		▶ 内部dtd:将约束规则定义在xml文档中 <!DOCTYPE 根标签名 [约束文档]> (极少使用)
		▶ 外部dtd:将约束的规则定义在外部的dtd文件中
				本地:<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
				网络:<!DOCTYPE 根标签名 PUBLIC "dtd文件名" "dtd文件的位置URL">
				
Demo:
约束文档(student.dtd)
<!ELEMENT students (student*) >				
<!ELEMENT student (name,age,sex)>			
<!ELEMENT name (#PCDATA)>					
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>

XML文件(student.xml)
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE students SYSTEM "student.dtd">
<students>
    <student number="s001">
        <name>Alice</name>
        <age>10</age>
        <sex></sex>
    </student>
    <student number="s002">
        <name>Cocoa</name>
        <age>12</age>
        <sex></sex>
    </student>
</students>



------------------------------------------------ Schema ----------------------------------------------------

首先:
	DTD在引入多个约束文档时,会出现约束冲突的问题————<name>标签上,用的是哪一个约束文档的约束?
	因此Schema引入了"xml命名空间",即xmlNamespace,即xmlns————
	每一个约束文档都对应一个命名空间,在使用标签时,需要给标签写上命名空间前缀;命名空间通常很长,因此需要取个别名
引入:
	1.写xml文档的根元素
	2.引入xsi前缀(固定)
	3.引入xsd文件命名空间
	4.给每一个命名空间取个别名
	
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"					-- 固定格式

         xmlns="http://www.springframework.org/schema/beans"					-- 默认命名空间(没有别名)
         xmlns:context="http://www.springframework.org/schema/context"			-- 给命名空间取别名
         xmlns:mvc="http://www.springframework.org/schema/mvc"					-- 给命名空间取别名

         xsi:schemaLocation="													-- 引入多个约束文档(3个)
         http://www.springframework.org/schema/beans							-- 命名空间
         http://www.springframework.org/schema/beans/spring-beans.xsd			-- Schema文档实际位置
         http://www.springframework.org/schema/context							--...
         http://www.springframework.org/schema/context/spring-context.xsd		--...
         http://www.springframework.org/schema/mvc								--...
         http://www.springframework.org/schema/mvc/spring-mvc.xsd">				--...(两两对应)

	<abc></abc>																	-- 通过别名,对应到ns(默认),再对应到文档
    <context:abc></context:abc>													-- 通过别名,对应到ns,再对应到文档
    <mvc:abc></mvc:abc>															-- 通过别名,对应到ns,再对应到文档

</beans>

 

 

解析

解析即读取,将文档中的数据读取到内存中。

解析xml的方式(思想):

  1. DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
    操作方便,可以对文档进行CRUD的所有操作;但占内存
  2. SAX:逐行读取,基于事件驱动(基于队列的)
    不占内存;但只能读取,不能增删改

xml常见的解析器:JAXP、DOM4J、 Jsoup、PULL

------------------------------------------------ Jsoup ----------------------------------------------------

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

String path = Demo1.class.getClassLoader().getResource("student.xml").getPath();	// 获取xml资源路径
Document document = Jsoup.parse(new File(path), "utf-8");							// 获取Document对象
Elements elements = document.getElementsByTag("name");								// 获取Element(s)对象
System.out.println(elements.get(0).text());											// 获取内容(数据)


------------------------------------------------- 对象 ----------------------------------------------------

1. Jsoup 工具类。可以解析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树。

3. Elements 元素Element对象的集合。可以看做 ArrayList<Element> 来使用

4. Element 元素对象
	▶ 获取子元素对象
	 	getElementById(String id)									
		getElementsByTag(String tagName)							
		getElementsByAttribute(String key)							
		getElementsByAttributeValue(String key, String value)		
	▶ 获取属性值
		attr(String key)
	▶ 获取文本内容
		text():获取文本内容(不包括标签)
		html():获取所有内容(包括标签)

5. Node:节点对象。是Document和Element的父类

 
快捷查询

-------------------------------------------- Selector选择器 ---------------------------------------------------

document.select("student")						// 查询所有的student标签
document.select("student name")					// 查询student下的name标签
document.select("student[number]")				// 查询带有number属性的student标签
document.select("student[number='s001']")		// 查询带有number属性且number属性值为"s001"的student标签: .calss, #id 选择器也有,但不常用


-------------------------------------------- XPath ----------------------------------------------------------
XPath为XML路径语言,需要导入jar包

Document document = Jsoup.parse(new File(path), "utf-8");
JXDocument jxDocument = new JXDocument(document);

List<JXNode> jxNodes = jxDocument.selN("//student")						// 查询所有的student标签
List<JXNode> jxNodes = jxDocument.selN("//student/name")				// 查询student下的name标签
List<JXNode> jxNodes = jxDocument.selN("//student[@number]")			// 查询带有number属性的student标签
List<JXNode> jxNodes = jxDocument.selN("//student[@number='s001']")		// 查询带有number属性且number属性值为"s001"的student标签

可使用getElement()方法,将JXNode节点对象转化为我们熟悉的元素对象

 

 

 

 

 

 

 

 

 

 

 

 

 

End ♬

by a Lolicon

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值