XML 标记语言
<1> 简介
XML – 可扩展标记语言 语法类似 HTML , 初期设计用于取代 HTML 但被弃用. 现在主要作为储存数据的配置文件 (类似Properties) , 而并非展示数据, 标签内容通常不被执行.
★ 特点:
① 标签自定义
② 语法严格
③ 标签必须闭合(或自闭和 <br/>
)
④ XML 标签名称区分大小写
<2> 基本语法
1. 文档声明
- XML 第一行必须为文档声明, 写法如下:
<?xml version='1.0' ?>
- version: 版本号
encoding: 编码方式
standalone: 是否独立(是否依赖其他文件)
例:<?xml version="1.0" encoding="utf-8" standalone='no' ?>
<?xml version='1.0' ?> || XML 第一行必须为文档声明
<users> || 必须有且只有一个根标签
<user id='1'> || id 的值定义时必须加引号 (单双均可)
<name>zhangsan</name>
<age>23</age>
<gender>male</gender>
<br/>
</user>
<user id='2'>
<name>lisi</name>
<age>24</age>
<gender>female</gender>
</user>
</users>
2. 标签
- 标签名称只可以包含字母、数字以及其他的字符, 并且要以字母开头 (不能使用XML)
- id 值必须唯一
3. 文本
CDATA
区:在该区域中的数据会被原样展示
格式: <![CDATA[数据]]>
数据部分可分多行, 其会被原样展示, 无序转义符
<3> 约束
1. 简介
约束文档: 约束 XML 文档的标签定义规则 (标签的嵌套方式)
分类:
- DTD:一种简单的约束技术 (扩展名:dtd)
- Schema:一种复杂的约束技术 (扩展名:xsd)
2. DTD
(1) 基本语法
(2) 引用方式
1.外部约束
本地:<!DOCTYPE 根标签名 SYSTEM "dtd文件的位置">
网络:<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
2.内部约束
XML 中: <!DOCTYPE students [约束内容(可换行)]>
3.Schema
(1) 基本语法
Schema 用于解决 DTD 的局限性
(2) 引用方式
<4> 解析
1. 概念
解析(读取): 将 XML 文档中的数据读取到内存中.
写入: 将内存中的数据永久保存到 XML 中.
2. 解析方法
(1) DOM
特点: 可以进行 CURD 所有操作, 但占用内存较大, 不适用于内存较小的设备.
(2) SAX
特点: 逐行读取, 读取后释放内存, 但是只能读取, 不能增删改.
3. 解析器 (Jsoup 解析器)
(1) 简介
Jsoup 是java 的 HTML 解析器, 也可解析 XML, 可直接解析 URL 地址, HTML 文本内容.
(2) 使用步骤
① 导JAVA包
② 获取 Document 对象
③ 获取对应标签的 Element 对象
④ 获取数据
(3) 对象的使用
1.Jsoup 工具类 — parse
parse(File in, String charsetName):
解析 xml 或 html 文件的。
String path0 = Jsoup01.class.getClassLoader()/*←类加载器*/.getResource("a.xml").getPath();
Document document0 = Jsoup.parse(new File(path0), "utf-8");
★ XML 文档示例: a.xml :
parse(String html):
解析 xml 或 html 字符串, 直接将 HTML 或 XML 文档语句以 String 字符串格式传参即可
parse(URL url, int timeoutMillis):
通过网络路径获取指定的html或xml的文档对象, 第一个参数为网址的 URL 对象, 第二个参数为截至时间的毫秒值.
2. Document 文档对象
★ Document 对象用于获取 Element 对象, 以便后续操作
★ 注: 首先使用 Jsoup 获取到 Document 对象, 记为 document0
① 获取所有标签名称为 students 对象, 并返回 Element 集合:
Elements elements = document.getElementsByTag("student");
② 获取属性名 (XML中属性名为自定义) 为idt的元素对象, 并返回 Element 集合:
Elements elements1 = document.getElementsByAttribute("idt");
③ 获取 number 属性值为 a2 的元素对象, 并返回 Element 集合:
Elements elements2 = document.getElementsByAttributeValue("number", "a2");
④ 获取 id 为 d 属性值的元素对象, 并返回 Element 集合:
Element elements3 = document.getElementById("d");
3. Element 元素对象
① 获取属性值:
获取 student 对象的属性值:
String number = element_student.attr("number");
② 获取文本内容:
String text = element0.text(); // 将从 XML 中获取的 Element 对象解析为文本
String html = element0.html(); // 将从 XML 中获取的 Element 对象解析为 HTML
<5> 查询
1. selector 选择器
① 查询 name 标签:
Elements elements = document.select("name");
② 查询 id 为 s 的元素:
Elements elements1 = document.select("#s");
③ 获取 student 标签并且 number 属性值为 a1 的 age 子标签:
Elements elements3 = document.select("student[number=\"a1\"] > age");
2. XPath 选择器
★ 注: 使用 JSoup 中的 XPath 需要额外导包!
★ 注: 首先使用 Jsoup 获取到 Document 对象, 记为 document0
使用 XPath时需要创建JXDocument对象:
JXDocument jxDocument = new JXDocument(document);
List<JXNode> jxNodes = jxDocument.selN("//student");
for (JXNode jxNode : jxNodes) {
System.out.println(jxNode);}