1.概念:
Extensible Markup Language可扩展标记语言
2、可扩展:
标签都是自定义的:如<user> <student>
功能:存储数据
1.配置文件
2.在网络中传输
3、xml与html的区别:
(1) xml标签都是自定义的,html标签是预定义。
(2) xml的语法严格,html 语法松散
(3) xml 是存储数据的,html 是展示数据
4、语法:
(1)基本语法:
1. xml文档的后缀名. xml
2. xml第一行必须定义为文档声明
3. xml文档中有且仅有一个根标签
4.属性值必须使用引号(单双都可)引起来
5.标签必须正确关闭
6. xml标签名称区分大小写
(2)快速入门:
<?xml version='1.0' ?>
<users>
<user id='1'>
<name>zhangsan</name>
<age>23</age>
<gender>male</ gender>
</user>
<user id='2'>
<name>lisi</name>
<age>24</age>
<gender>male</ gender>
</user>
</users>
(3)组成部分:
文档声明
格式: <?xml 属性列表?>
属性列表:
version:版本号,必须的属性
encoding :编码方式。告知解析引擎当前文档使用的字符集,默认值:ISO- 8859-1
standalone:是否独立(yes、no)
指令:结合css的(了解)如:`<?xml-stylesheet type="text/css" href="a.css" ?>`
标签:命名规则与java命名差不多,有一点:不能以xml开始
属性:id属性值唯一
文本:CDATA区:在该区域数据会原样展示
格式:<![CDATA[ 数据 ]]>
(4)约束:规定xml文档的书写规则
作为框架的使用者(程序员) :
-能够在xml中引入约束文档
-能够简单的读懂约束文档
分类:
1. DTD:一种简单的约束技术
2. schema:一种复杂的约束技术
DTD:
*内部dtd :将约束规则定义在xml文档中
*外部dtd :将约束的规则定义在外部的dtd文件中
本地: <!DOCTYPE根标签名SYSTEM "dtd文件的位置">
网络: <!DOCTYPE根标签名PUBLIC "dtd文件名字”"dtd文件的位置URL">
Schema :
引入:填写xml文档的根元素
引入xsi前缀:
xmlns :xsi="http: //www. W3.org/2001/XMLSchema-instance"
引入xsd文件命名空间:
xsi : schemalocation="http:/ /www.itcast.cn/xml student. xsd"
为每一个xsd约束声明一个前缀,作为标识:
xmlns="http://www.itcast.cn/xml"
例:
<students xmlns:xsi="http://www . W3. org/ 2001/XMLSchema-instance"
xmlns:a="http://www. itcast.cn/xml"
xsi : schemalocation="http: //www. itcast.cn/xmlstudent .xsd">
其中a为前缀
以后要用a里面的标签,就得加a的前缀才能使用
(5)解析:操作xml文档,将文档中的数据读取到内存中
操作xml文档
1.解析(读取) :将文档中的数据读取到内存中
2.写入:将内存中的数据保存到xml文档中。持久化的存储
解析xml的方式:
1. DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
优点:操作方便,可以对文档进行CRUD的所有操作
缺点:占内存
2. SAX: 逐行读取,基于事件驱动的。
优点:不占内存。
缺点:只能读取,不能增删改
5、xml常见的解析器:
(1)JAXP:sun公司,不好用
(2)DOM4J:优秀
(3)Jsoup
(4)PULL:Android内置解析器,sax方式的
6、Jsoup:
步骤:
(1)导入jar包
在IDEA中点击jar包右键选择Add as Library然后点确定就好了
(2)获取Document对象
①获取路径:
String path = 类名.class.getClassLoader().getResource("目标xml文件").getPath();
②通过路径获取对象:
Document document = Jsoup.parse(new File(path),"编码方式(如utf-8)");
(3)获取对应的标签Element对象
getElementById(String id) :根据id属性值获取唯一的element对象
getElementsByTag(String tagName) : 根据标签名称获取元素对象集合
getElementsByAttribute(String key) : 根据属性名称获取元素对象集合
getElementsByAttributeValue(String key, String value) :根据对应的属性名和属性值获取元素对象集合
(4)获取数据
System.out.println(element.text());//输出文本
示例:
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 {
//1、获取文档对象
//先获取student.xml的path
String path = JsoupDemo1.class.getClassLoader().getResource("student.xml").getPath();
System.out.println(path);
//解析xml文档,加载进内存,获取dom树--->Document
Document document = Jsoup.parse(new File(path),"utf-8");
//2、获取元素对象Element
Elements elements = document.getElementsByTag("name");
//获取第一个name标签的Element对象
Element element = elements.get(0);
//3、获取数据
System.out.println(element.text());
}
}
注意:在获取path的时候,要注意本类所在的路径中,不能有中文,空格等特殊的符
号,否则获取出来的路径会有错误,导致获取到的路径会报错!!!
(5)获取Element对象的方法:
//1、获取所有student对象
Elements elements = document.getElementsByTag("student");
//2、获取属性中有id的所有对象
Elements elements1 = document.getElementsByAttribute("id");
// System.out.println(elements1);
//3、获取number属性为s001的所有对象
Elements elements2 = document.getElementsByAttributeValue("number","s001");
// System.out.println(elements2);
//4、获取id值为1的对象
Element element = document.getElementById("1");
System.out.println(element);
(6)获取Element对象的属性值:String attr(“属性名”);
获取文本内容:String text()获取所有子标签的纯文本内容
String html()获取标签体的所有内容(标签和文本)
示例:
String s = document.getElementsByTag("student").get(0).attr("number");
System.out.println(s);
-------------------------------------------------------------------------
System.out.println(document.getElementsByTag("name").text());
System.out.println(document.getElementsByTag("student").html());
(7)快捷查询方式:
1、selector :选择器
*使用的方法: Elements select(String cssQuery)
*语法:参考Selector类中定义的语法
2、XPath : XPath即为XML路径语言,它是一种用来确定XML (标准通用标记语言的
子集)文档中某部分位置的语言
*使用Jsoup的Xpath需要额外导入jar包。
*查询w3cshool参考手册,使用xpath的语法完成查询