XML
1、什么是XML?有什么用?
XML是重量级的数据传输格式
在不同的语言之间进行数据传输的时候,可以使用XML进行数据传输
XML概述
1、XML概念
xml一般指可扩展标记语言。可扩展标记语言 (Extensible Markup Language, XML)
可扩展:XML标签都是自定义的,可以自定义很多新的标签,叫做可扩展标签,所以叫做可扩展。
标记语言:标签构成的语言
2、XML有什么作用/功能?
存储数据
1.配置文件
2.在网络中传输
3、xml和html的区别?
xml的标签都是自定义的,html的标签都是预定义的
xml的语法非常严格,html语法松散
xml是存储数据的,html是展示数据的。
4、w3c:万维网联盟
5、大部分浏览器都有xml的解析引擎(引擎就是核心程序)。
6、语法:
1.xml文档的后缀名 .xml
2.XML 声明文件的可选部分,如果存在需要放在文档的第一行,如下所示:
<?xml version="1.0" encoding="utf-8"?>
3.所有的 XML 元素都必须有一个关闭标签
4.XML 标签对大小写敏感
5.XML 必须正确嵌套
6.XML 属性值必须加引号
7.实体引用
< < less than
> > greater than
& & ampersand
' ' apostrophe
" " quotation mark
8.XML 中的注释
<!-- This is a comment -->
9.xml文档中有且仅有一个根标签。
必须有一个根标记。
10.属性值必须使用引号引起来“单双”引号都可以
7、XML 命名规则
名称可以包含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字母 xml(或者 XML、Xml 等等)开始
名称不能包含空格
8、xml组成部分:
1.文档声明
格式: <?xml 属性列表 ?>
?和尖括号之间、?和xml之间不能有空格,有空格会报错
xml必须是小写的
属性列表:
version:版本号,必须的属性,不写报错(version='1.0')
encoding:编码方式,告知浏览器以那种编码方式打开该xml文档,encoding的属性值一般与文件的编码方式一至
告知解析引擎当前的文档使用的字符集/编码方式,默认值iso-8859-1
encoding属性值是解析引擎使用的。
高级的开发工具,会自动识别encoding属性值,并且自动修改文件的编码方式。
standalone:是否独立
yes:不依赖其他文件
no:依赖其他文件
可有可无,如果有必须在文档的第一行,之前不能有空行
2.指令(了解)结合css的
<?xml-stylesheet type="text/css" href="1.css"?>
对中文标签不起作用。
1.css是引入的css样式,css在html中怎么写,xml中就怎么写
3.标签
名称可以包含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字母 xml(或者 XML、Xml 等等)开始
名称不能包含空格
4.属性
id属性值唯一
5.文本内容
CDATA区:在该区域中的数据会被原样展示
语法格式:<![CDATE[
数据
]]>
9、谁编写xml?
使用软件的用户编写。
我们在使用spring框架的时候需要编写配置文件,
spring就是软件(半成品软件),我们程序员就是使用软件的用户
谁解析xml?
软件本身区解析。
谁类写约束?
半成品软件的开发人员。(编写spring框架的人员)
10、什么是约束?
规定xml文档的书写规则。
11、约束的分类
第一种:
DTD:一种简单的约束技术
内部dtd:将约束规则定义在xml文档中。
<!DOCTYPE 根标签名 [
写约束
]>
外部dtd:将约束规则定义在外部dtd文件中。
本地:<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
SYSTEM表示系统、本地的意思。
示例:<!DOCTYPE students SYSTEM "student.dtd"> <!--student.dtd是相对位置-->
网络:<!DOCTYPE 根标签名 PUBLIC "dtd文件的名字" "dtd文件的位置">
dtd文件的名字:名字随意,写啥都可以
dtd文件的位置:是一个URL,什么http开头的一个路径
一个xml文件中只能有一个“<!DOCTYPE >”这样的语句,引入dtd约束。(所以不存在两个根标签冲突的问题)
第二种:
Schema:一种复杂的约束技术
12、解析:操作xml文档,将文档当中的数据读取到内存当中
将文档中的数据读取到内存当中。
写入:内存中的数据保存到xml文档当中,持久化的存储。
13、解析xml的方式两种:
DOM:将标记语言文档一次性加载进内存,在内存中形成一颗DOM树【通常使用在服务器端】
优点:操作方便,可以对文档进行crud的所有操作
缺点:消耗内存
SAX: 逐行读取,基于事件驱动【通常使用在移动端】
优点:不占内存
缺点:只能读取,不能 增删改
14、常见的xml解析器
解析器就是准对于DOM和SAX这两种不同的思想写出来的一些工具包,我们可以直接使用。
1.JAXP:SUN公司提供的解析器,支持DOM和SAX两种思想。
2.DOM4J:一款非常优秀的解析器。【我们在服务器端经常采用DOM4J来解析xml】
3.Jsoup:jsoup是一款Java的HTML解析器。
通过Java程序解析xml文件
// 获取xml文件的绝对路径
String path = Thread.currentThread().getContextClassLoader().getResource("student.xml").getPath();
// 定义文档对象
Document document = null;
try {
// 获取xml文档对象
document = Jsoup.parse(new File(path),"utf-8");
} catch (IOException e) {
throw new RuntimeException(e);
}
// 通过标签名获取标签对象
Elements tagName = document.getElementsByTag("name");
// 因为Elements是java.util.ArrayList的子类,可以使用get(下标)的方法,获取集合中的元素
Element element = tagName.get(0);
// text()方法获取此元素及其所有子元素的组合文本。
System.out.println(element.text());
对象的使用
1、Jsoup:工具类,可以解析html或者xml返回Document
parse(File f,String charset)
parse(String html) html是一个字符串
parse(URL url,int timeoutMillis) // 解析网络中的html,第一个参数必须是一个URL对象不能是一个字符串
可以通过方式3来做一下爬虫的小程序
2、Document:文档对象,代表内存中的DOM树
主要通过Document对象来获取Element对象
1.getElementsByTag(String tagName) : 根据标签名获取元素对象的集合
2.getElementsByAttribute(String key):根据属性名称获取元素对象的集合
3.getElementsByAttributeValue(String key,String value):根据属性名称和属性值获取元素对象的集合
4.getElementById(String id):根据id属性值来获取唯一的element对象
快速找到某个元素:
Element select(String cssQuery); cssQuery是css选择器字符串。
3、Elements:元素Element对象的集合,可以当作ArrayList<Element>对象来使用
4、Element:元素对象
获取子元素对象:
1.getElementsByTag(String tagName) : 根据标签名获取元素对象的集合
2.getElementsByAttribute(String key):根据属性名称获取元素对象的集合
3.getElementsByAttributeValue(String key,String value):根据属性名称和属性值获取元素对象的集合
4.getElementById(String id):根据id属性值来获取唯一的element对象
获取属性值:
String attr(String key):根据属性名称获取属性值
获取文本内容:
String text() :方法获取此元素及其所有子元素的组合文本
String html() : 获取标签体的所有内容(包括子标签的字符串内容)
5、Node:节点对象
Document和Element的父类。