XML简单学习
1.概念
-
可扩展标记语言(Extensible Markup Language)
-
可扩展:标签都是自定义的
-
功能
- 存储数据
- 配置文件
- 在网络中传输
- 存储数据
-
xml与html的区别
- xml标签都是自定义的,html标签都是预定义的
- xml语法严格,html语法松散
- xml是存放数据的,html是展示数据的
-
xml语法
- xml后缀名为.xml
- xml第一行有且必须为文档声明
- xml文档中有且只有一个根标签
- xml属性值必须被引号包含
- 标签必须被正确关闭(要么自闭和,要么包含开始结束标签)
- xml标签名称区分大小写
-
xml组成部分
-
文档声明
-
格式:
<?xml version="1.0" 属性列表 ?>
-
version:版本号,必须的属性
-
encoding:编码方式,告知解析引擎的解码方式,默认:ISO-8859-1
-
standalone:是否独立,是否依赖于其他文件(yes,no)
-
-
指令(结合css):
<?xml-stylesheet type='text/css' href='a.css'?>
-
标签:
- 标签名称自定义,可以包含字母、数字、下划线,不能以数字、xml开头,不能包含空格
-
属性:
- id属性值唯一
-
文本:
-
CDATA区中的文本会被原样展示
<![CDATA][需要写的文本]>
-
-
-
说明文档:规定xml文档的书写规则
- 约束:规定xml文档的书写规则
- 谁编写xml?--用户,软件的使用者(程序员)
- 谁解析xml?--软件--->半成品软件(框架)
-
分类:
- DTD:一种简单的约束技术 .dtd
- 引入DTD文档到xml文档中
- 内部DTD:将约束规则定义在xml文档中
- 外部DTD:将约束文档定义在外部文档中
- 本地:
<!DOCTYPE 根标签名 SYSTEM "DTD文档的位置">
- 网络:
<!DOCTYPE 根标签名 PUBLIC "DTD文档的名字" "DTD文档的位置URL">
- 本地:
- 引入DTD文档到xml文档中
- Schema:一种复杂的约束技术 .xsd
- DTD:一种简单的约束技术 .dtd
-
解析:
- 操作xml文档,将文档的数据读取到内存中
- 解析:将文档中的数据读取到内存中
- 写入:将内存中的数据保存到xml文档中,持久化存储
- 解析xml的方式:
- DOM:将标记语言文档一次性加载到内存,将其转化为一棵DOM内存树
- 优点:操作方便,可以对文档解析增删改查的操作
- 缺点:消耗内存
- SAX:逐行读取,基于事件驱动
- 读一行释放一行,内存消耗小
- 只能读取
- DOM:将标记语言文档一次性加载到内存,将其转化为一棵DOM内存树
- 操作xml文档,将文档的数据读取到内存中
-
解析器:
-
xml常见的解析器:
- JAXP:sun公司提供的解析器,支持dom和sax两种思想
- DOM4J:一款非常优秀的解析器
- Jsoup:jsoup一款java的HTML解析器
- PULL:Android操作系统内置的解析器,sax方式的
-
Jsoup
public class JsoupDemo01 { public static void main(String[] args) throws IOException { //获取Docunment对象,根据xml文档获取,获取xml的path String path = JsoupDemo01.class.getResource("xmlstudy.xml").getPath(); //解析xml文档,加载文档进内存,获取DOM树 Document parse = Jsoup.parse(new File(path), "utf-8"); //获取Element元素对象 Elements elements = parse.getElementsByTag("name"); for (Element element : elements) { System.out.println(element); } } }
- Jsoup:工具类,可以解析html或xml文档,返回Document
- parse:解析html或xml,返回Document
- parse(File in,String charsetName):解析文件
- parse(String html):解析字符串
- parse(URL url,int timeoutMillis):通过网络获取
- parse:解析html或xml,返回Document
- Docunment:文档对象,代表内存中的DOM树
- 主要用于获取Element对象
- getElementsByTags(String tagName):根据标签名称
- 主要用于获取Element对象
- Element:元素对象,获取属性和值
- 获取子Element元素对象,同Document
- 获取属性值:String attr(String key)
- 获取文本对象:String text(),获取纯文本内容,不包含标签
- 获取标签体的所有内容(包括子标签的字符串内容):String html()
- Node:节点对象
- 所有Document和Element的父类
- Jsoup:工具类,可以解析html或xml文档,返回Document
-
-
快捷查询
-
selector:选择器
-
使用方法:Elements select(String cssQuery)
Document document = Jsoup.parse(is, "utf-8",""); System.out.println(document.select("#001>gender").text()); //获取id为001的标签下的子标签gender并输出其内容
-
-
XPath:xml路径语言
- 需要导入额外的jar包
-