XML
全称为Extensible Markup Language
可扩展标记语言。一般作为配置文件,可在网络中传输。
和html的区别是,它的语法规定更加严格,同时,xml中的标签都是自定义的,而html中的标签是预定义的。
xml一般用来存储数据,而html一般用来展示数据。
xml文档的第一行必须为形如<?xml 属性列表 ?>
的文档声明。必须要有一个根标签,标签必须正确关闭。同时和html不同xml的标签区分大小写。属性值必须使用单双引号包裹。
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
一般xml文档声明格式如上,但是standalone一般不写,该属性的含义是是否依赖其他文件,取值只有yes/no。version属性表示采取的xml版本,常用的是1.0版本,encoding表示此文档内容采用的编码格式。
当需要原样展示数据时,可以将内容放到CDATA区中。
约束
约束定义了xml的书写规则。
通常有两种定义约束的方式:
- DTD 该方式使用较为简单
- Schema 该方式使用较为复杂,当约束更加详细
使用DTD约束有两种方式,一种时将约束规则定义在xml文档中。
另外一种时将DTD规则定义在外部的DTD文件中。
- 使用本地DTD规则
<!DOCTYPE 根标签名 SYSTEM "dtd文件位置">
- 使用网络DTD规则
<!DOCTYPE 根标签名 PUBLIC "dtd文件名" "dtd文件URL">
操作xml文档
操作xml文档,有两种行为:
- 解析 也就是将xml数据读入到内存
- 写入 也就是修改xml数据
xml解析方式
xml文档有两种解析方式:
- DOM 方式 将标记语言一次性加载新内存,在内存中形成一颗DOM树
优点:操作方便,可以对文档进行crud的所有操作
缺点:消耗内存 - SAX 逐行读取,基于事件驱动
优点:内存消耗小
缺点:只能读取,不能增删改
xml常见解析器
xml常见解析器有如下几种:
- JAXP:SUN公司提供的解析器,支持dom和sax两种实现 劣质
- DOM4J:
- jsoup:HTML解析器,解析xml无问题 推荐
- PULL:Android系统内置解析器,sax方式
Jsoup
本来是用来解析html文档的解析器,但是同为标记语言,解析xml也没有问题。
使用parse静态方法解析xml文档,返回一个Document对象。
Document对象
Document 文档对象,代表内存中的dom树 继承自Element。
Elements 对象
继承自ArrayList<Element>
类,相当于Element对象的容器。通常在选择某些节点是返回该对象。
Element 对象
该对象相当于一个标签节点。是一个较为基础的对象,Document类同样继承自该类。
常用函数函数有:
getElementsByTag 根据标签名称返回Elements
getElementsByAttribute 根据属性名称获取元素对象
getElementsByAttributeValue 根据属性值获取元素对象
attr 获取属性值
text 获取标签内的文本内容(包含子标签内的文本内容)
html 获取html/xml内容
Node对象
Node对象,为Element的基类
快捷选择方式
select CSS选择器方式
XPath xml路径语言,用于在xml中查询信息。
使用jsoupXpath需要额外的jar包