1、XML概念
XML是一门可扩展的标记语言
●可扩展:标签都是自定义的
功能:
(1)存储数据
(2)配置文件
(3)在网络中传输
XML和HTML的区别
(1) XML标签都是自定义的,HTML标签是预定义的
(2)XML的语法严格,html语法松散
(3)XML是存储数据的,HTML是显示数据
2、XML语法
基本语法
(1) XML文档的后缀名.xml
(2)XML第一行必须定义文档声明
(3) XML文档中有且仅有一个根标签
(4) 属性值必须使用引号(单双都可以)引起来
(5) 标签必须正确关闭
(6)XML标签名称区分大小写
<?xml version="1.0"encoding="UTF-8"?>
<users>
<user id="1001">
<name>zhangsan</name>
<age>19</age>
<gender>man</gender>
</user>
<user id="1002">
<name>lisi</name>
<age>20</age>
<gender>man</gender>
</user>
</users>
组成部分:
文档声明:
- 格式:<?xml 属性列表 ?>
- 属性列表:
version:版本号,必须的属性
encoding:编码方式,告知解析引擎当前文档使用的字符集,默认值ISO-8859-1
standalone:是否独立 - 取值:yes,不依赖其他文件;no,依赖其他文件
标签,标签名称自定义
规则:
(1)名称可以包含字母,数字以及其他的字符
(2) 名称不能以数字或者标点符号开头
(3) 名称不能以字母xml或者XML开始
(4)名称不能包含空格
属性: id属性值唯一
文本:
(1)CDATA区:在该区域中的数据会被原样展示
(2)格式:<![CDATA[数据]]>
3、约束
(1)XML的约束就是用来规定XML文档的书写规则
(2)作为框架的使用者(程序员)
能够在XML中引入约束文档
能够简单的读懂约束文档
(3)分类:
DTD:一种简单的约束技术
Schema:一种复杂的约束技术
(4)DTD
引入dtd文档到xml文档中
内部dtd:将约束规则定义在XML文档中
外部dtd:将约束的规则定义在外部的dtd文件中
本地:<!DOCTYPE 根标签名 SYSTEM “dtd文件的位置”
网络:<!DOCTYPE 根标签名 PUBLIC “dtd文件名” “dtd文件的位置URL”
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
(5)l Schema:
引入:
●填写XML问的根元素
●引入xsi前缀
●引入xsd文件命名空间
●为每一个xsd约束声明一个前缀,称为标识
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
4、解析
(1) XML解析:操作XML文档,把文档中的数据读取到内存中
操作:
●解析(读取),将文档中的数据读取到内存中
●写入:将内存中的数据保存到XML文档中,持久化存储。
(2)解析XML的方式
●DOM(Document Object Model):将标记语言文档一次性加载到内存中,在内存中形成一颗dom数
优点:操作方便,可以对文档进行CRUD的所有操作。
缺点:占内存
●SAX:逐行读取,基于事件驱动的
优点:不占内存
只能读取,不能增删改
(3)XML常见的解析器
●JAXP:SUN公司提供的解析器,支持DOM和SAX两种方式
● DOM4J:一款非常优秀的解析器
●Jsoup:JSOUP是一款Java的HTML解析器,可以直接解析某个URL地址、HTML文本内容
●PULL:Android操作系统内置的解析器,SAX方式
(4) Jsoup快速入门
● 导入JAR包
● 获取Document对象
● 获取对应的标签Element对象
● 获取数据
package com.bdit;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.File;
import java.io.IOException;
public class JSOUPDemo {
public static void main(String[] args) throws IOException {
//1、获取xml_demo1.xml的path 获取的是SRC目录下的
String path=JSOUPDemo.class.getClassLoader().getResource("xml_demo1.xml").getPath();
System.out.println(path);
//2、解析XML文档,加载文档到内存,获取DOM树
Document document= Jsoup.parse(new File(path),"utf-8");
//3、获取元素对象
Elements elements=document.getElementsByTag("name");
System.out.println(elements.size());
//4、获取第一个name的Element对象
Element element=elements.get(0);
//5、获取数据
String name=element.text();
System.out.println(name);
}
}
对象的使用
(1)Joup:工具类,可以解析HTML或XML文档,返回Documentu
parse:有它来实现
parse(File in,String characterName):
parse(String html)
parse(URL url,int timeoutMills)
(2)Document:文档对象,代表内存中的DOM数
获取Element对象:
getElementById
getElementsByTag
getElementsByAttribute()
getElementsByAttributeValue()
(3) Elements:元素对象的集合,可以当做ArrayList来使用
(4)Element元素对象
(5) 获取属性值:String attr(String key):根据属性名称获取属性值
(6) 获取文本内容:
String text()
String html()
Node:结点对象
是Document和Element的父类。