XML
概念:可扩展标记语言
-
可扩展:标签都是自定义的
功能
-
存储数据
-
作为配置文件
-
在网络中传输
-
xml与html的区别
-
xml标签都是自定义的,html是预定义的
-
xml语法严格,html语法松散
-
xml是存储数据的,html是展示数据
语法
基本语法
-
后缀名为.xml
-
xml第一行为文档声明
-
有且仅有一个根标签
-
属性值必须使用引号引起来
-
必须有结束标签或者自闭和
-
标签名称区分大小写
快速入门
<?xml version='1.0'?> <users> <user id='1'> <name>zhangsan</name> </user> </users>
组成部分
-
文档声明
-
格式
-
<?xml 属性列表?>
-
问号与尖括号不能有空格
-
-
属性列表
-
version:版本:1.0是主流版本,必须要写这个属性,不写就报错
-
encoding:编码方式:告知解析引擎当前文档使用的字符集,默认值 iso-8859-1,
-
standalone: 是否独立
-
yes:不依赖其他的文件 独立
-
no:依赖其他文件 不独立
-
-
-
-
指令
-
标签:标签名称都是自定义的
-
规则:
-
不能数字开头
-
可以包含字母,数字以及其他的字符
-
不能包含空格
-
名称不能以xml开始
-
-
-
属性
-
id属性值唯一
-
-
文本
-
CDATA区 :数据会被原样展示
<![CDATA[ 数据 ]]>
-
约束
-
规定xml的书写规则的
-
分类
-
DTD:一种简单的约束技术
-
内部
-
引入方式
<!DOCTYPE 根标签名[ 这里写dtd约束 ]>
-
-
外部
-
引入
-
本地:<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
-
网络上的:<!DOCTYPE 根标签名 PUBLIC "dtd文件名" "dtd文件的位置">
-
-
约束文件内容示例
<!ELEMENT students (student*)>//根标签名 *代表不限制数量 <!ELEMENT student ( name,age, sex)>//包含的属性 <!ELEMENT name (#PCDATA)>//#PCDATA 代表name属性值是一个字符串 <!ELEMENT age (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ATTLIST student number ID #REQUIRED>//表示student的属性number文本类型为ID,#REQUIRED代表必须这个属性是必须的,#IMPLIED则是代表这个属性是可选的
-
-
-
SCHEMA:可以对属性的值进行限定
-
引入
-
填写xml文档的根元素
-
引人xsi前缀.xmlns:xsi="http: / /www.w3.org/2001/XNLSchema-instance"
-
引入xsd文件命名空间. xsi:schemaLocation="http: / /www.itcast.cn/xml student.xsd"
-
为每一个xsd约束声明一个前缀,作为标识xmlns="http://www.itcast.cn/xml"
-
-
-
解析
-
操作xml文档,将文档中的数据读取到内存中
-
解析:将文档中的数据读取到内存中
-
写入:将内存中的数据保存到xml中,持久化的存储
-
-
解析xml的方式
-
DOM:叫标记语言文档一次性加载进内存,在内存中形成一颗DOM树
-
优点:操作方便,可以对文档进行CURD的所有操作
-
缺点:消耗内存
-
-
SAX:逐行读取,基于事件驱动的
-
优点:不占内存
-
缺点:只能读取,不能增删改
-
-
我们一般在服务器端使用DOM的思想,在移动端使用SAX的思想
-
-
xml常见的解析器
-
JAXP:sun公司提供的解析器,支持dom和sax两种思想
-
DOM4J:一款非常优秀的解析器
-
Jsoup: jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jquery的操作方法来取出和操作数据。
-
PULL: Android操作系统内置的解析器,sax方式的。
-
-
Jsoup解析器的使用
-
快速入门
-
步骤
-
导入jar包
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.14.3</version> </dependency>
-
获取Document对象
-
获取对应的标签
-
获取数据
package com.tt.jsoup; 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 JsoupDemo1 { public static void main(String[] args) throws IOException { //获得xml文件的路径 String path = JsoupDemo1.class.getClassLoader().getResource("aaa.xml").getPath(); //通过Jsoup这个解析器来解析xml文件,把xml文件加载进内存 Document parse = Jsoup.parse(new File(path), "utf-8"); //public class Elements extends ArrayList<Element> {} //这里的Elements是一个集合,泛型的类型是我们传给他的元素对象 Elements elementsByTag = parse.getElementsByTag("name"); //打印第一个name的值 Element element = elementsByTag.get(0); System.out.println(element.text()); } }
-
-
对象的使用
-
Jsoup:是一个工具类,可以解析html或者xml文档,返回document
-
document:文档对象,代表内存中的dom树
-
获取Element对象
-
getElementsByTag(String tagName):根据标签名称获取元素对象集合
-
getElementsByAtrribute(String key):根据属性名称获取
-
getElementsByAtrributeValue(String key,String value):根据对应的属性名和属性值获取集合
-
getElementsById(String id):根据属性id获取
package com.tt.jsoup; 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 JsoupDemo3 { //<?xml version="1.0" encoding="utf-8"?> //<students> // <student> // <name id="666">张三</name> // <age>13</age> // <sex>male</sex> // </student> //</students> public static void main(String[] args) throws IOException { //获得xml文件的路径 String path = JsoupDemo3.class.getClassLoader().getResource("aaa.xml").getPath(); //通过Jsoup这个解析器来解析xml文件,把xml文件加载进内存 Document parse = Jsoup.parse(new File(path), "utf-8"); //getElementsByTag(String tagName):根据标签名称获取元素对象集合 Elements student = parse.getElementsByTag("student"); System.out.println(student); System.out.println("=================================="); //getElementsByAtrribute(String key):根据属性名称获取 Elements name = parse.getElementsByAttribute("id"); System.out.println(name); System.out.println("=================================="); // getElementsByAtrributeValue(String key,String value):根据对应的属性名和属性值获取集合 Elements name1 = parse.getElementsByAttributeValue("id","666"); System.out.println(name1); System.out.println("=================================="); // getElementsById(String id):根据属性id获取 Element name3 = parse.getElementById("666"); System.out.println(name3); } }
-
-
-
Elements:这里的Elements是一个集合,泛型的类型是我们传给他的元素对象
-
获取子元素对象
-
getElementsByTag(String tagName):根据标签名称获取元素对象集合
-
getElementsByAtrribute(String key):根据属性名称获取
-
getElementsByAtrributeValue(String key,String value):根据对应的属性名和属性值获取集合
-
getElementsById(String id):根据属性id获取
-
-
获取属性值
-
String attr(String key):根据属性名称获取属性值
-
-
获取文本内容
-
String text():获取文本内容
-
String html():获取标签体的所有内容(包括子标签的)
package com.tt.jsoup; 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 JsoupDemo4 { public static void main(String[] args) throws IOException { //获得xml文件的路径 String path = JsoupDemo4.class.getClassLoader().getResource("aaa.xml").getPath(); //通过Jsoup这个解析器来解析xml文件,把xml文件加载进内存 Document parse = Jsoup.parse(new File(path), "utf-8"); //先得到一个element对象 Elements sid = parse.getElementsByAttribute("sid"); System.out.println(sid); //String attr(String key):根据属性名称获取属性值 String id = sid.attr("sid"); System.out.println(id); System.out.println("=========================="); //1. String text():获取文本内容 //2. String html():获取标签体的所有内容(包括子标签的) String text = sid.text(); System.out.println(text); } }
-
-
-
Node:节点对象
-
快捷查询方式
-
选择器
-
Elements select(String cssQuery);
-
-
xpath:XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。
-
使用Jsoup的xpath需要导入一个新的jar包
<!-- https://mvnrepository.com/artifact/cn.wanghaomiao/JsoupXpath --> <dependency> <groupId>cn.wanghaomiao</groupId> <artifactId>JsoupXpath</artifactId> <version>2.5.1</version> </dependency>
-
-
-
-
-