概述
概念
Extensible Markup Language 可扩展标记语言
功能
- 配置文件
- 在网络中传输
与html区别
xml | html |
---|---|
标签自定义 | 标签预定义 |
语法严格 | 语法松散 |
储存数据 | 展示数据 |
语法
基本语法
- 后缀名为.xml
- 文档第一行为文档声明
<?xml version='1.0' ?>
- 有且仅有一个根标签
- 属性值必须使用单引号或双引号引起来
- 标签必须正确关闭(自闭和或围堵)
- 标签名称区分大小写
快速入门
<?xml version='1.0' ?>
<users>
<user id="1">
<name>zhangsan</name>
<age>18</age>
<gender>male</gender>
</user>
<user id="2">
<name>lisi</name>
<age>28</age>
<gender>male</gender>
</user>
</users>
组成部分
- 文档声明
- 格式:<?xml 属性列表?>
- 属性列表
- version:版本号,必需的属性
- encoding:编码方式
- standalone:是否独立,取值为yes/no,一般不设置
- 指令(结合CSS)
在第二行写<?xml-stylesheet type="text/css" href="a.css" ?>
- 标签:不能以数字标点开始,不能包含空格,不能以字母xml等开始
- 属性:id属性值唯一
- 文本:大于号、小于号等特殊字符需要转义(同html)。或使用CDATA区
<![CDATA[ 展示的内容 ]]>
约束
分类
- DTD:简单的约束。
- Schema:复杂的约束 。后缀名是.xsd,是一种特殊的xml文档
引入
引入内部dtd <!DOCTYPE 根标签名 [dtd约束的内容]>
引入本地的外部dtd:<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
引入网络的外部dtd:<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
引入Schema约束
- 填写xml文档根元素
- 引入xsi前缀
- 引入xsd文件命名空间
- 为每一个xsd约束声明一个前缀,作为标识
解析
解析xml的方法
- DOM:将标记语言文档一次性加载进内存,在内存中形成一颗dom树
- SAX:逐行读取,基于事件驱动。
xml常见解析器
- JAXP:支持dom和sax两种思想(但特别烂,没人用)
- DOM4J:非常优秀的解析器,基于dom思想
- Jsoup:dom
- PULL:Android内置解析器,sax方式
Jsoup
Jsoup快速入门
- 获取Document对象
- 获取对应标签Element对象
- 获取数据
public class JsoupTest {
public static void main(String[] args) throws IOException {
String path = JsoupTest.class.getClassLoader().getResource("students.xml").getPath();
Document document = Jsoup.parse(new File(path), "utf-8");
Elements names = document.getElementsByTag("name");
Element name = names.get(0);
System.out.println(name.text());
}
}
Jsoup中的对象
- Jsoup:工具类
- Document:文档对象,代表内存中的dom树
- Elements:元素Element对象的集合
- Element:元素
- Node:结点对象,是Element和Document的父类
快捷查询方式
- selector选择器:调用Node的select方法,参数书写格式类似于CSS选择器
- XPath:根据Document对象创建JXDocument