XML 数据格式最主要的功能: 数据传输和存储
XML: 可扩展性标记语言,主要目的是传输和存储数据
XML标签必须自定义
XML是W3C推举的数据传输格式
要检查自己写的XML是否正确,可以通过浏览器打开
所有的XML必须有一个根节点,即所有标签必须在一个标签下
<root> <!--注释-->
<user>adzt</user>
<msg>run</msg>
</root>
与HTML的区别
- HTML标签不能自定义、XML标签必须自定义。
- HTML语法要求不严格,XML语法要求极其严格,必须是成对标签。
- XML用来传输和存储数据,HTML用来展示数据。
XML的基本语法
- XML必须有根节点,通常定义为root(根节点:其他所有节点的父级节点)
- 所有XML必须是成对出现
- XML标签名大小写敏感
- 标签不能交叉
<a>a<b>b</a></b><!--这是不正确的-->
- 注释
<!--在这里写注释-->
- 特殊字符使用实体转义:
在XML中,需要转义的字符有:
(1)& &;
(2)< <;
(3)> >;
(4)" ";
(5)' &apos;
XML属性
一个标签可以有多个属性,属性的值必须使用引号引起来
命名规则:同变量名的命名规则
<person>
<man>
<name age = "36" position = "神仙">太白</name>
</man>
<woman>
<name age= " 60">老君</name>
</woman>
</person>
属性是表示标签自身的一些额外信息
注意:在解析XML数据时,属性会带来额外的解析代码
CDATA语法<![CDATA[不解析的内容]]>
可以原样输出不解析的内容,特殊字符较多时可以使用CDATA。
XML组成:
- 文档声明
- 格式
<?xml 属性列表 ?>
- 属性列表:
- version : 版本号,必须要有(针对程序员来说,而不是编译)
- encoding : 编码方式
- standalone : 是否独立
- yes :不依赖于其他文件
- no : 依赖于其他文件
- 格式
- 指令 : 结合CSS
- 标签 :
规则:- 名称可以包含字母、数字以及其他字符
- 名称不能以数字或者标点符号开始
- 名称不能以字母xml开始
- 名称不能包含空格
- 属性:ID属性值唯一
- 文本
约束
规定XML文档的书写规则
分类:
- DTD : 一种简单的约束技术
- Schema :一种复杂的约束技术
DTD :引入dtd文档到xml文档当中,后缀。dtd
- 内部dtd : 将约束规则定义在XML文档中
- 外部dtd : 将约束规则定义在外部的dtd文件中
- 本地 :`<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置”>`
- 网络 :`<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" “dtd文件位置的URL”>`
局限性:
- 语法结构:
DTD的语法与XMl不同,使用DOM,XPath,XSL无法处理,为自动化文档处理带来不便 - 数据类型
DTD数据类型不能自由扩充,不利于XML数据交换场合验证,不能对内容进行限定 - 文档结构
DTD中,所有元素、属性都是全局的, 无法声明仅与上下文位置相关的元素或属性 - 名称空间
DTD中没有名称空间的概念,不直接支持名称空间
Schema:后缀,.xsd
引入步骤:
- 填写XML文档的根元素(根标签)
- 引入xsi前缀。(固定格式)xmlns:xsi = “http://www.w3c.org/2001/XMLSchema_instance”(有很多取值,根据需求来)
- 引入xsd文件命名空间 xsi:schemaLocation=“xsd文件的路径地址”
- 为每一个xsd约束声明一个前缀,作为标识。 xmlns:前缀名 =“命名空间”
- 不写前缀名的话表示空前缀。
- 当有多个约束有同一个属性时,可以通过前缀名将其区分。
解析操作:操作XML文档,将文档中的数据读取到内存中
- 解析(读取): 将文档中的数据读取到内存当中
- 写入 :将内存中的数据保存到XML文档中持久化存储
解析XML的方式:
- DOM : 将标记语言文档一次性加载进内存,在内存中形成DOM树(服务端常用)
优点 : 操作方便,可以对文档进行CRUD的所有操作
缺点 : 占内存 - SAX : 逐行读取,基于事件驱动(移动端常用)
优点 : 不占内存
缺点 : 只能读取,不能增删改
常见的XML解析器:
JAXP : sun公司提供的解析器,支持dom和sax两种思想
DOM4J : 一款非常优秀的解析器
Jsoup: jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API, 可通过DOM, CsSS以及类似于jQuery的操作方法来取出和操作数据。
PULL : Android操作系统内置的解析器,sax方式。
Jsoup使用
步骤:
- 导入jar包
- 获取Document对象
- 获取对应的标签Element对象
- 获取数据
package com.SpringMVC;
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 TestJsoup {
public static void main(String[] args) throws IOException {
// 获取Document对象
String path = TestJsoup.class.getClassLoader().getResource("test.xml").getPath();
//解析XML文档,加载文档进内存,获取DOM树
Document document = Jsoup.parse(new File(path), "utf-8");
//获取元素对象
Elements elements = document.getElementsByTag("name");
Element element = elements.get(0);
String name = element.text();
System.out.println(name);
}
}
Jsoup中的对象使用:
- Jsoup : 工具类,可以解析HTML或XML文档,返回Document对象
parse :解析HTML或者XML文档,返回Document - Document : 文档对象。代表字内存中的DOM树
主要用来获取Element对象 - Elements :元素element对象的集合。可以当做ArrayList<Element>来使用
- Ellement : 元素对象
- Node : 节点对象
快捷查询方式 :
- selector: 选择器
- Xpath:XML的路径语言,用来确定XML文档中某部分位置的语言