1.概述
- 概念:可扩展标记语言(extensible markup language)。可扩展:标签都是自定义的
- XML与HTML的区别
1. XML的标签都是自定义的,HTML标签是预先定义好的
2. XML的语法严格,HTML的语法松散
3. XML是用来传输和存储数据的,HTML是展示数据的
- 一个XML文档示例
语法注意事项:
1、xml文档声明必须在第一行
2、xml文档中有且仅有一个根标签
3、属性值必须使用引号(单双都可)引起来
4、XML中的标签名称区分大小写
5、HTML中的实体引用适用于XML,比如说<表示<
6、XML中空格被保留
<?xml version = '1.0' encoding = 'UTF-8' ?>
<users>
<user id = '1'>
<name>张三</name>
<age>23</age>
<gender>male</gender>
</user>
</users>
- 尽量使用元素来描述数据,而不是属性。
2.XML中的组成部分
1.文档声明中的属性
- version:版本号,一个必须的属性
- encoding:编码方式,通知解析引擎当前文档使用的字符集
- Standalone:是否独立。属性值有两个,yes和no,表示是否依赖于其他文件
<?xml version="1.0" encoding="utf-8"?>
2.属性
id属性值必须唯一,用于标识不同的标签。
<!--type即为属性-->
<file type="gif">computer.gif</file>
3.文本
- CDATA区:在该区域中的数据会被原样展示
格式:
<![CDATA[需要展示的数据]]>
4.指令
5.标签
XML中的所有标签都是双标签,每个元素都有开始标签和结束标签
3.XML中的约束
- 约束:规定XML文档的书写规则
- 分类
1.DTD:一种简单的约束技术
2.Schema:一种复杂的约束结束
1.DTD
DTD:Document Type Definition,DTD用于验证编辑的XML文档是否合法。
2.Schema
- 后缀名:xsd
4.XML中的解析
1.常见的解析器
- JAXP:sun公司提供的解析器,支持DOM和SAX两种思想
- DOM4j:一款优秀的解析器
- Jsoup:一款Java的HTML解析器
- PULL:Android内置的解析器,SAX方式的
2.读取XML文档(解析)
- 解析XML的方式:
1. DOM:将标记语言文档一次性加载进内存,在内存中形成一颗DOM树
优点:操作方便,可以对文档进行CRUD的所有操作
缺点:占内存
2. SAX:琢行读取,基于事件驱动的
优点:不占内存
缺点:只能读取,不能写
3.写入(将内存中的数据保存到XML文档中)
5.Jsoup解析器的使用
1.对象的使用
- Jsoup:工具类,可以解析HTML文档或者xml文档,返回Document对象
paese相关:
1. parse(URL url, int timeoutMillis)
2. parse(String html, Parser parser)
3. parse(String html, String baseUri, Parser parser)
4. parse(String html, String baseUri)
5. parse(String html)
6. parse(InputStream in, String charsetName, String baseUri, Parser parser)
7. parse(InputStream in, String charsetName, String baseUri)
8. parse(File file, String charsetName, String baseUri, Parser parser)
9. parse(File file, String charsetName, String baseUri)
10.parse(File file, String charsetName)
- Document:文档对象,代表内存中的DOM树
1. getElementsByTag(String tagName):根据标签名称获取元素对象集合
2. getElementsByAttribute:根据属性名称获取元素对象集合
3. getElementById:根据属性id值获取唯一的元素对象
4. getElementsByAttributeValue(String key, String value):根据对应的属性名和属性值获取元素对象集合
- Elements:元素Element对象的集合,可以当作ArrayList
来使用 - Element:元素对象
获取子元素对象:
获取属性值
String attr(String key):根据属性名称获取属性值
获取文本内容
String text();获取所有子标签的纯文本内容
String html();获取标签体的所有内容
- Node:节点对象
2.根据选择器查询
- 方法:Elements select(String cssQuery):参考Selector类中定义的语法
3.根据Xpath查询
- 使用Jsoup的Xpath需要导入额外的jar包
- 查询w3x手册,查询Xpath语法